題目描述
有兩個用鏈表表示的整數,每個結點包含一個數位。這些數位是反向存放的,也就是個位排在鏈表的首部。編寫函數對這兩個整數求和,並用鏈表形式返回結果。
給定兩個鏈表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;
}
};