【LeetCode】445. 两数相加 II
题目
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
思路
使用栈来逆序链表元素。
代码
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
stack<int> st1, st2;
while (l1) {
st1.push(l1->val);
l1 = l1->next;
}
while (l2) {
st2.push(l2->val);
l2 = l2->next;
}
ListNode *res = new ListNode(0);
int c = 0;
while (!st1.empty() || !st2.empty()) {
int sum = c;
if (!st1.empty()) {
sum += st1.top();
st1.pop();
}
if (!st2.empty()) {
sum += st2.top();
st2.pop();
}
res->val = sum % 10;
ListNode *head = new ListNode(sum / 10);
head->next = res;
res = head;
c = sum / 10;
}
return c > 0 ? res : res->next;
}
};