您的位置:首页 > 其它

lintcode-链表求和

2017-08-12 19:34 239 查看

描述

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

样例

给出两个链表 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:有哪里不对的还请大家指正!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: