美文网首页lintcode
167. 链表求和

167. 链表求和

作者: 和蔼的zhxing | 来源:发表于2018-01-08 23:27 被阅读6次

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

相加,并记录进位情况

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

 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;
    
    }

相关文章

  • 167. 链表求和

    你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开...

  • LintCode:167. 链表求和

    你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开...

  • [容易]167.链表求和

    我是小小强,这是我的第8篇原创文章,阅读需要大约10分钟。 题目 LintCode:链表求和 描述 你有两个用链表...

  • 链表 求和

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 每日Leetcode—算法(14)

    141.环形链表 算法(快慢指针): 155.最小栈 算法一: 算法二: 167. 两数之和 II - 输入有序数...

  • 2020-08-15 链表求和

    1. 链表求和 反向求和,比较简单,从左到右扫描就可以

  • 数据结构算法相关题(LeetCode相关问题)

    1. 斐波那契数列求和 斐波那契数列(0,1,1,2,3,5 . . .)求和 反转链表(反转链表[https:...

  • 一篇文章搞定面试中的链表题目(java实现)

    废话少说,上链表的数据结构 1.翻转链表 2.判断链表是否有环 3,链表排序 4.链表相加求和 5.得到链表倒数第...

  • 链表算法题集合(java实现)

    链表的数据结构 1.翻转链表 2.判断链表是否有环 3,链表排序 4.链表相加求和 5.得到链表倒数第n个节点 6...

  • 【LeetCode】2. Add Two Numbers

    题意 给定两个非空链表,链表每个结点均为非负整数,对两个链表求和返回链表; 解法 解法很简单,如果不会,可以重拾小...

网友评论

    本文标题:167. 链表求和

    本文链接:https://www.haomeiwen.com/subject/oabinxtx.html