你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
样例 1:
输入: 7->1->6->null, 5->9->2->null
输出: 2->1->9->null
样例解释: 617 + 295 = 912, 912 转换成链表: 2->1->9->null
样例 2:
输入: 3->1->5->null, 5->9->2->null
输出: 8->0->8->null
样例解释: 513 + 295 = 808, 808 转换成链表: 8->0->8->null
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
ListNode * addLists(ListNode * l1, ListNode * l2) {
// write your code here
ListNode *p1=l1;
ListNode *p2=l2;
int sum=0;
ListNode *head=new ListNode(0);
head->next=NULL;
ListNode *p=head;
while(p1!=NULL&&p2!=NULL)
{
sum=sum+p1->val+p2->val;
p1=p1->next;
p2=p2->next;
ListNode *temp=new ListNode(sum%10);
sum/=10;
p->next=temp;
p=p->next;
}
ListNode *temp=new ListNode;
temp->next=NULL;
if(p1==NULL) temp=p2;
else temp=p1;
while(temp!=NULL)
{
sum+=temp->val;
p->next=new ListNode(sum%10);
sum/=10;
p=p->next;
temp=temp->next;
}
if(sum) p->next=new ListNode(sum);
return head->next;
}
};