栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode & C++ & 2.

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode & C++ & 2.

两数相加
  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;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955171.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号