给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2, 4, 3], l2 = [5, 6, 4]
输出:[7, 0, 8]
解释:342 + 465 = 807
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9, 9, 9, 9, 9, 9, 9], l2 = [9, 9, 9, 9]
输出:[8, 9, 9, 9, 0, 0, 0, 1]
C++
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { return dfs(l1, l2, 0); }
ListNode* dfs(ListNode* l, ListNode* r, int i) { if (!l && !r && !i) return nullptr; int sum = (l ? l->val : 0) + (r ? r->val : 0) + i; ListNode* node = new ListNode(sum % 10); node->next = dfs(l ? l->next : nullptr, r ? r->next : nullptr, sum / 10); return node; } };
|
Python
class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: def dfs(l, r, i): if not l and not r and not i: return None s = (l.val if l else 0) + (r.val if r else 0) + i node = ListNode(s % 10) node.next = dfs(l.next if l else None, r.next if r else None, s // 10) return node return dfs(l1, l2, 0)
|
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例1:
示例2:
示例3:
提示:
- 链表的长度范围为
[1, 100]
0 <= node.val <= 9
- 输入数据保证链表代表的数字无前导 0
C++
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack<int> s1,s2; while(l1){ s1.push(l1 -> val); l1 = l1 -> next; } while(l2){ s2.push(l2 -> val); l2 =l2 -> next; }
ListNode* nxt = nullptr; int carry = 0; while(!s1.empty() || !s2.empty()){ ListNode* node = new ListNode(((s1.empty() ? 0 : s1.top()) + (s2.empty() ? 0 : s2.top()) + carry) % 10, nxt); carry = ((s1.empty() ? 0 : s1.top()) + (s2.empty() ? 0 : s2.top()) + carry) / 10; if(!s1.empty()) s1.pop(); if(!s2.empty()) s2.pop(); nxt = node; } if(carry) return new ListNode(carry, nxt); return nxt; } };
|