给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字(0-9)。
请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
输入:l1 = [0], l2 = [0] 输出:[0] 解释:0 + 0= 0.
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1] 解释:9999999 + 9999 = 10009998.
原题目:两数相加
朴素解法(哨兵技巧)
两数相加(链表)⭐
//
与%
7//10 # 0 10%10 # 0 12%10 # 2 12//10 # 1
class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: dummy = ListNode(0) tmp = dummy t = 0 while l1 or l2: a = l1.val if l1 else 0 b = l2.val if l2 else 0 t = a + b + t tmp.next = ListNode(t % 10) t = t //10 tmp = tmp.next if l1 is not None: l1=l1.next if l2 is not None: l2=l2.next if t>0: tmp.next = ListNode(t) return dummy.next
整除
//
与 取余%
的位置一定要弄清楚先后!!!
# 一个结点类 # 若是没有传参,使用默认参数 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next
dummy = ListNode(0) print(dummy.val) print(dummy.next)
0
None
dummy = ListNode() # 默认参数是0 print(dummy.val) print(dummy.next)
0
None
dummy = ListNode(1) print(dummy.val) print(dummy.next)
1
None
node = ListNode(5) dummy = ListNode(next=node) print(dummy.val) print(dummy.next.val) print(dummy.next)
0
5
<main.ListNode object at 0x000002507DA19CF8>
图例
补充
- 链表(单链表)的基本操作及C语言实现
- 链表的基础知识+Python实现四种链表