给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
    示例:
    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * struct ListNode *next;
    6. * };
    7. */
    8. struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    9. struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    10. struct ListNode *step = head;
    11. int carry = 0;
    12. while (l1 != NULL || l2 != NULL)
    13. {
    14. int val1 = l1 == NULL ? 0 : l1->val;
    15. int val2 = l2 == NULL ? 0 : l2->val;
    16. int sum = val1 + val2 + carry;
    17. step->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    18. step = step->next;
    19. step->val = sum % 10;
    20. carry = sum / 10;
    21. if (l1 != NULL)
    22. {
    23. l1 = l1->next;
    24. }
    25. if (l2 != NULL)
    26. {
    27. l2 = l2->next;
    28. }
    29. }
    30. if (carry == 1)
    31. {
    32. step->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    33. step = step->next;
    34. step->val = 1;
    35. }
    36. step->next = NULL;
    37. struct ListNode *ret = head->next;
    38. free(head);
    39. return ret;
    40. }