lintcode-链表求和

描述

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

样例

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

思路

先说一下这道题什么意思吧,我刚开始都没看懂。。。
有两个链表。链表中包含一个整数(倒序),每个结点的值是整数的一位数,第一个结点是个位,第二个结点是十位……以此类推。例如链表一,表示513,链表二,表示295 。513+295 = 808。相加之后的结果也要倒序存储在链表中。
因为是求和,首先新建一个新单链表,将求和以后的结果存储在其中。在链表一和链表二非空的情况下,个位和个位相加,十位与十位相加……要注意,如果相加的结果大于十,要进位,我们定义一个整形carry,表示相加后的值。当两个链表都遍历完成以后,注意是否有进位,若有,还需再创建一个新结点。

代码实现

ListNode *addLists(ListNode *l1, ListNode *l2) {
        ListNode *head = new ListNode(0);           //创建新链表
        ListNode *point = head;
        int carry = 0;
        while (true) {
            if(l1 != NULL){
                carry += l1->val;
                l1 = l1->next;
            }
            if(l2 != NULL){
                carry += l2->val;
                l2= l2->next;
            }
            point->val = carry % 10;
            carry /= 10;
            if(l1 != NULL || l2!=NULL || carry != 0){
                point = (point->next = new ListNode(0));         //创建新结点
            } else
                break;
        }
        return head;
    }

PS:有哪里不对的还请大家指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值