题目描述
两个链表,表示数字,高位在首部。
求两个数字之和。
思路
用栈。
或者反转链表。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<int> st1;
stack<int> st2;
while(l1) {
st1.push(l1->val);
l1 = l1->next;
}
while(l2) {
st2.push(l2->val);
l2 = l2->next;
}
stack<int> res;
int jin = 0;
while(!st1.empty() || !st2.empty()) {
int x = (st1.empty() ? 0 : st1.top());
int y = (st2.empty() ? 0 : st2.top());
int cur = (x + y + jin) % 10;
jin = (x + y + jin) / 10;
res.push(cur);
if (!st1.empty()) st1.pop();
if (!st2.empty()) st2.pop();
}
if (jin != 0) res.push(jin);
ListNode* dummy = new ListNode(0);
ListNode* st = dummy;
while(!res.empty()) {
dummy->next = new ListNode(res.top());
res.pop();
dummy = dummy->next;
}
return st->next;
}
};