前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >167. 链表求和相加,并记录进位情况

167. 链表求和相加,并记录进位情况

作者头像
和蔼的zhxing
发布2018-09-04 11:42:23
5540
发布2018-09-04 11:42:23
举报
文章被收录于专栏:和蔼的张星的图像处理专栏

你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null

相加,并记录进位情况

这个没有什么难的,从头开始是个位,然后十位,百位……以此类推,要用一个变量来记录进位情况,这种相加进位最多进1,然后就是,当一个链表加到头就停止(注意处理进位),然后再处理没有加完的那个链表,处理完之后然后再看有没有进位,有的话放在链表最后,链表也写了很久了,这种操作一定要熟练: 虽然很长,但是基本的处理套路都在第一个循环里了,看看就可以了。

代码语言:javascript
复制
 ListNode * addLists(ListNode * l1, ListNode * l2) {
        // write your code here
        ListNode *head=new ListNode(0);   //存放结果
        ListNode *first;
        first=head;           //假的表头,主要是把这个地址存起来,这个不动
        if(l1==NULL)  return l2;
        if(l2==NULL)  return l1;
        int res=0;
        int jinwei=0;
        while(l1!=NULL&&l2!=NULL)  
        {
            res=l1->val+l2->val+jinwei;    //当前位求和
            if(res>9)               //如果有进位,算出来。
            {
                res%=10;      //取余数
                jinwei=1;     //进位是1
            }
            else
            jinwei=0;          //进位置零
            
            ListNode *temp=new ListNode(res);   //生成一个新节点
            head->next=temp;         //连接到head上
            head=head->next;       //head向后移动
            
            l1=l1->next;         //两个链表向后移动
            l2=l2->next;
        }
        
        
        
        while(l1!=NULL)       //如果l1比较长
        {
            res=l1->val+jinwei;
            if(res>9)      //处理最后还有进位的情况
            {
                res%=10;
                jinwei=1;
            }
            else 
            jinwei=0;
        
            ListNode *temp=new ListNode(res);
            head->next=temp;         //连接到head上
            head=head->next;       //head向后移动
            
            l1=l1->next;         //两个链表向后移动
        }
        
         while(l2!=NULL)      //如果l2比较长
        {
            res=l2->val+jinwei;
            if(res>9)
            {
                res%=10;
                jinwei=1;
            }
            else 
            jinwei=0;
            
            
            ListNode *temp=new ListNode(res);
            head->next=temp;         //连接到head上
            head=head->next;       //head向后移动
            
            l2=l2->next;         //两个链表向后移动
        }
        
        cout<<jinwei<<endl;
        
        if(jinwei==1)          //最后还有进位的话
        {
            ListNode *temp=new ListNode(jinwei);
            jinwei=0;
            head->next=temp;         //连接到head上
            head=head->next;       //head向后移动
        }
        return  first->next;
    
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相加,并记录进位情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档