LeetCode & C++ & 2.

LeetCode & C++ & 2.,第1张

两数相加
  1. 首先肯定是要获取两个链表的长度,遍历一下看单向链表的最优一位是不是NULL。再进行使用高精度加法的模板:
dummy = tail = ListNode(0)

while l1 or l2 or carry:

    sum = l1?.val + l2?.val + carry // carry 表示进位

    tail1.next = ListNode(sum % 10)

    tail = tail.next

    carry = sum /= 10

    l1, l2 = l1?.next, l2?.next

return dummy.next
  1. 先创建一个额外增加的头节点,记作dummy,这样就可以对所有节点进行正常的 *** 作,可以发现dummy一直指向的是这个new ListNode(0)。
  2. 再创建一个tail指针,tail这个指针一直指向的是最后一个节点。
  3. 用sum来对累加的和进行表示,sum = l1.val + l2.val + carry,carry表示进位。
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode dummy(0);

        ListNode* tail = &dummy;

        int sum = 0;

        while(l1 || l2 || sum){

            sum += (l1 ? l1->val : 0) + (l2 ? l2->val : 0);

            l1 = l1 ? l1->next : nullptr;
            
            l2 = l2 ? l2->next : nullptr;
            
            tail->next = new ListNode(sum % 10);
            
            sum /= 10;

            tail = tail->next;

        }
    
    return dummy.next;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1325696.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存