LeetCode 热题 100 总结——2、两数之加

65 阅读1分钟

思路 讲述看到这一题的思路 解法很常规,就是将两个结点的值相加即可,难点在于:

  1. 需要判断进位的问题
  2. 及链表长度不一的情况

解题方法 描述你的解题方法 链表进位问题:{ 计算结点值:使用sum%10; 储存进位值:sum/10;}

链表长度不一致的问题: while (l1 || l2 || carry) { // 当l1、l2不为空或者还有进位时继续循环

作者:JiaPeng Cai 链接:leetcode.cn/problems/ad… 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode(0); // 创建一个虚拟节点作为头节点
        ListNode* curr = dummy;            // 当前节点指针
        int carry = 0;                     // 进位

        while (l1 || l2 || carry) { // 当l1、l2不为空或者还有进位时继续循环
            int sum = carry; // 当前位的和等于进位值
            if (l1) {
                sum += l1->val; // 加上l1当前节点的值
                l1 = l1->next;  // l1指针后移
            }
            if (l2) {
                sum += l2->val; // 加上l2当前节点的值
                l2 = l2->next;  // l2指针后移
            }
            carry = sum / 10;                    // 计算进位
            curr->next = new ListNode(sum % 10); // 创建新节点存储当前位的值
            curr = curr->next;                   // 当前节点指针后移
        }

        return dummy->next; // 返回虚拟节点的下一个节点,即为相加后的链表
    }
};