题目:两数相加

首先明确思路,逐节点的将l1和l2相加,如果遇到需要进位的情况,就单独将所进的位数保存起来,并加到下一次的sum中去,然后在同一次循环中构造好相加后的链表

 1ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
 2{
 3    ListNode dummy(0);
 4    ListNode* curr = &dummy;
 5
 6    int carry = 0;
 7    while(l1 || l2 || carry != 0)
 8    {
 9        int sum = carry;
10        if(l1)
11        {
12            sum += l1->val;
13            l1 = l1->next;
14        }
15        if(l2)
16        {
17            sum += l2->val;
18            l2 = l2->next;
19        }
20
21        // 进位
22        carry = sum / 10;
23        int digit = sum % 10;
24        curr->next = new ListNode(digit);
25        curr = curr->next;
26    }
27    return dummy.next;
28}