题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Plus {
public:
ListNode* plusAB(ListNode* a, ListNode* b) {
// write code here
if(a==NULL)return b;
if(b==NULL)return a;
ListNode *p=a,*q=b;
ListNode* c=new ListNode(-1);
ListNode* ptr=c;int tmpVal=0;
while(p&&q)
{
ListNode*tmpNode=new ListNode(tmpVal);
tmpVal=0;
tmpNode->val=tmpNode->val+(p->val)+(q->val);
if ((tmpNode->val)>9)
{
tmpNode->val=(tmpNode->val)%10;//超过十;
tmpVal=1;
}
ptr->next=tmpNode;
ptr=tmpNode;
p=p->next;
q=q->next;
}
while(p)
{
ListNode*tmpNode=new ListNode(tmpVal);
tmpNode->val=(p->val)+tmpVal;
tmpVal=0;
if (tmpNode->val>9)
{
tmpNode->val=(tmpNode->val)%10;//超过十;
tmpVal=1;
}
ptr->next=tmpNode;
ptr=tmpNode;
p=p->next;
}
while(q)
{
ListNode*tmpNode=new ListNode(tmpVal);
tmpNode->val=(q->val)+tmpVal;
tmpVal=0;
if (tmpNode->val>9)
{
tmpNode->val=(tmpNode->val)%10;//超过十;
tmpVal=1;
}
ptr->next=tmpNode;
ptr=tmpNode;
q=q->next;
}
if (tmpVal==1)
{
ListNode*tmpNode=new ListNode(tmpVal);
ptr->next=tmpNode;
ptr=tmpNode;
}
ptr->next=NULL;
return c->next;
}
};