链表求和

问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。

样例

给出两个链表 3->1->5->null5->9->2->null,返回 8->0->8->null

解题思路:新建一个链表里面的节点其实就是其他两个节点加和对10取余数。在设置一个整型变量对加和的值除10,得到的数就是要进的位数,按题目要求插在链表后面就可以了

实现代码:

class Solution {
public:
    ListNode *addLists(ListNode *l1, ListNode *l2) {
        ListNode *dummy= new ListNode(0);
        ListNode *temp=dummy;
        if(l1==NULL)return l2;
        if(l2==NULL)return l1;
        int i=0,n=0;
        while(l1!=NULL&&l2!=NULL){

            n=(l1->val+l2->val+i)%10;
            i=(l1->val+l2->val+i)/10;
            dummy->next=new ListNode(n);
            l1=l1->next;
            l2=l2->next;
            dummy=dummy->next;
        }
        while(l1!=NULL){
            n=(l1->val+i)%10;
            i=(l1->val+i)/10;
            dummy->next=new ListNode(n);
            l1=l1->next;
            dummy=dummy->next;
        }
        while(l2!=NULL){
            n=(l2->val+i)%10;
            i=(l2->val+i)/10;
            dummy->next=new ListNode(n);
            l2=l2->next;
            dummy=dummy->next;
        }
       
       if(i!=0) dummy->next= new ListNode(i);
       return temp->next;
    }
};
感悟: 链表求和很容易,关键是对于大于10的数的处理,这题请教了别人,自己想的太简单了,提交几次都不成功,问了别人后,知道自己在处理进位的时候没处理好,有一个技巧 n=(l1->val+l2->val+i)%10;i=(l1->val+l2->val+i)/10;在这两句代码上,看懂了之后,其他的就简单了,对于长度不一样的链表,依次插到新链表的后面就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值