题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。 例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为
1->0->0->0。
思路
利用栈先将所有的数字存储好,然后弹出来相加即可。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
ListNode* addInList(ListNode* head1, ListNode* head2) {
// write code here
stack<int> s1;
stack<int> s2;
ListNode* h1 = head1;
ListNode* h2 = head2;
while(h1){
s1.push(h1->val);
h1 = h1->next;
}
while(h2){
s2.push(h2->val);
h2 = h2->next;
}
int t = 0;
ListNode *res = new ListNode(0);
while(!s1.empty() && !s2.empty()){
int v1 = s1.top();s1.pop();
int v2 = s2.top();s2.pop();
int v = (v1+v2+t)%10;
t = (v1+v2+t)/10;
ListNode *tmp = new ListNode(v);
// tmp.val = v;
//结果插进来
tmp->next = res->next;
res->next = tmp;
}
while(!s1.empty()){
int v1 = s1.top();s1.pop();
int v = (v1+t)%10;
t = (v1+t)/10;
ListNode *tmp = new ListNode(v) ;
// tmp.val = v;
//结果插进来
tmp->next = res->next;
res->next = tmp;
}
while(!s2.empty()){
int v2 = s2.top();s2.pop();
int v = (v2+t)%10;
t = (v2+t)/10;
ListNode *tmp = new ListNode(v) ;
// tmp.val = v;
//结果插进来
tmp->next = res->next;
res->next = tmp;
}
// cout<<t<<endl;
if(t) res->val = t;
else res = res->next;
return res;
}
};