Leetcode 2 两数之和

本文介绍了一种使用链表而非数组来实现两个大数相加的方法。通过定义链表节点并迭代输入链表,逐位进行加法运算,并处理进位情况,最终形成新的链表表示相加结果。

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

这道题要求用链表做,正常做用数组相信大家都会,链表法看了一下官方解法,比我自己做的工整多了,自己写了几遍加个注释放在这里

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head=nullptr;//定义头节点为空
        ListNode* tail=nullptr;
        int carry=0,sum=0;
        while(l1||l2){
            int n1=l1?l1->val:0;//l1有value,取出给n1;
            int n2=l2?l2->val:0;
            sum=n1+n2+carry;
            if(!head){//头节点为空,新链表没有结点
                head=tail=new ListNode(sum%10);//插入新节点,值为sum%10
            }else{//有头节点,后续结点插入
                    tail->next=new ListNode(sum%10);//尾结点后插入
                    tail=tail->next;
            }
            carry=sum/10;//进位值
            if(l1){//l1还有节点继续访问
                l1=l1->next;
            }
            if(l2){
                l2=l2->next;
            }
        }
        if(carry>0){//最后一个进位制放到链表最后
            tail->next=new ListNode(carry);
            tail=tail->next;
        }
        return head;//返回头节点即可
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值