原题是LeetCode中的第2题,我将题目做了下变形,原题中链表中的数字是逆序存储的,这里将它改为顺序存储,解法如下。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <stack>
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(l1->val==0){
return l2;
}
if(l2->val==0){
return l1;
}
ListNode* p1=l1;
ListNode* p2=l2;
stack<int> p1stack;
stack<int> p2stack;
ListNode result;
ListNode* l3=&result;
//将l1压入栈中
p1stack.push(p1->val);
while(p1->next != NULL){
p1=p1->next;
p1stack.push(p1->val);
}
//将l2压入栈中
p2stack.push(p2->val);
while(p2->next != NULL){
p2=p2->next;
p2stack.push(p2->val);
}
//将两个栈中的数字相加
int temp=0;
while((! p1stack.empty()) || (! p2stack.empty())){
int sum=0;
if((! p1stack.empty()) && (! p2stack.empty())){
sum=p1stack.top()+p2stack.top();
p1stack.pop();
p2stack.pop();
}
else if(p1stack.empty()){
sum=p2stack.top();
p2stack.pop();
}
else{
sum=p1stack.top();
p1stack.pop();
}
sum=sum+temp;
if(sum<10){
ListNode* newnode=new ListNode(sum);
l3->next=newnode;
l3=newnode;
temp=0;
}
else{
ListNode* newnode=new ListNode(sum%10);
l3->next=newnode;
l3=newnode;
temp=1;
}
}
if(temp==1){
ListNode* newnode=new ListNode(1);
l3->next=newnode;
}
return result.next;
}
};