Leetcode刷题笔记—两数相加
题目描述
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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]
提示:
- 每个链表中的节点数在范围 [1, 100] 内
- 0 <= Node.val <= 9
- 题目数据保证列表表示的数字不含前导零
个人题解
- C++实现:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *p = new ListNode(); ListNode *h = p; ListNode *p1 = l1, *p2 = l2; int f = 0; while(p1 != NULL && p2 != NULL) { int sum = p1->val + p2->val + f; ListNode* t = new ListNode(sum % 10); if(sum > 9) f = 1; else f = 0; p->next = t; p = t; p1 = p1->next; p2 = p2->next; } while(p1 != NULL) { int sum = p1->val + f; ListNode* t = new ListNode(sum % 10); if(sum > 9) f = 1; else f = 0; p->next = t; p = t; p1 = p1->next; } while(p2 != NULL) { int sum = p2->val + f; ListNode* t = new ListNode(sum % 10); if(sum > 9) f = 1; else f = 0; p->next = t; p = t; p2 = p2->next; } if (f == 1) { ListNode* t = new ListNode(1); p->next = t; } return h->next; } - Python3实现:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: h = p = ListNode() f = 0 while l1 != None and l2 != None: sum = l1.val + l2.val + f t = ListNode(sum % 10) p.next = t p = t if sum > 9: f = 1 else: f = 0 l1 = l1.next l2 = l2.next while l1 != None: sum = l1.val + f t = ListNode(sum % 10) p.next = t p = t if sum > 9: f = 1 else: f = 0 l1 = l1.next while l2 != None: sum = l2.val + f t = ListNode(sum % 10) p.next = t p = t if sum > 9: f = 1 else: f = 0 l2 = l2.next if f == 1: p.next = ListNode(1) return h.next
Leetcode题解
- C++实现:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *head = nullptr, *tail = nullptr; int carry = 0; while (l1 || l2) { int n1 = l1 ? l1->val: 0; int n2 = l2 ? l2->val: 0; int sum = n1 + n2 + carry; if (!head) { head = tail = new ListNode(sum % 10); } else { tail->next = new ListNode(sum % 10); tail = tail->next; } carry = sum / 10; if (l1) { l1 = l1->next; } if (l2) { l2 = l2->next; } } if (carry > 0) { tail->next = new ListNode(carry); } return head; } - Python3实现:
def addTwoNumbers(self, l1, l2): count = 0 ret = ListNode() tmp = ret while l1 or l2 or count: num = 0 if l1: num += l1.val l1 = l1.next if l2: num += l2.val l2 = l2.next if count: num += count count -= 1 count, num = divmod(num, 10) tmp.next = ListNode(num) tmp = tmp.next return ret.next
divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。