445. Add Two Numbers II 单链表加法
问题描述
You are given two linked lists representing two non-negative numbers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 8 -> 0 -> 7
Instructions:
This question is currently in draft mode.
If you feel the problem description is inaccurate or found missing test cases, please go to Discuss and post a new topic.
解决方案
CSDN: Eswai(http://blog.csdn.net/eswai)
运行时间39ms。
/**
* 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) {
stack<int> st1,st2;
int sum=0;
ListNode* p=NULL;
ListNode* x;
while(l1){
st1.push(l1->val);
l1=l1->next;
}
while(l2){
st2.push(l2->val);
l2=l2->next;
}
while(!st1.empty()||!st2.empty()){
if(!st1.empty()){
sum+=st1.top();
st1.pop();
}
if(!st2.empty()){
sum+=st2.top();
st2.pop();
}
x=new ListNode(sum%10);
x->next=p;
p=x;
sum/=10;
}
if(sum!=0){
x=new ListNode(sum%10);
x->next=p;
p=x;
}
return p;
}
};
时间复杂度: O(m+n)
空间复杂度: O(max{m,n})
其中m,n分别表示l1和l2的长度.