leetcode2 两数相加(Medium)
题目来源:leetcode2 两数相加
题目描述:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解题思路:
构造结果链表的头结点和前驱结点,方便链接。每次将两个链表的值相加,保存当前求和结果和进位,求和结果取模,进位加到下一次求和取模的结果上。最后两个链表都为空,也可能存在一个进位,若存在则构造最后一个结点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head=NULL,*pre=NULL;
int v,v1,v2,temp=0;
while(l1!=NULL||l2!=NULL)
{
v1=l1?l1->val:0;
v2=l2?l2->val:0;
v=(v1+v2+temp);
temp=v/10;
v=v%10;
ListNode *cur=new ListNode(v);
if(!head) head=cur;
else pre->next=cur;
pre=cur;
l1=l1?l1->next:NULL;
l2=l2?l2->next:NULL;
}
if(temp!=0){
ListNode *cur=new ListNode(temp);
pre->next=cur;
}
return head;
}
};