2. 两数相加

https://leetcode-cn.com/problems/add-two-numbers/

解法一:

就如同竖式加法,只是倒过来

遍历两个链表,对应位相加,进位向后传递。难点:链表长度不同时处理,以及进位处理.

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head = new ListNode(0);  //头结点
        ListNode* tmp = head;  //工作节点
        int upgrade = 0;  //进位标志
        while (l1 || l2 || upgrade) {
            int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + upgrade;
            upgrade = sum / 10;
            tmp->next = new ListNode(sum % 10);
            l1 = l1 ? l1->next : NULL;  //判断是否有后继
            l2 = l2 ? l2->next : NULL;
            tmp = tmp->next;
        }
        return head->next;  //头结点不使用
    }
};

最后更新于