方法1 :
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
val = tmp = 0
head = tree = ListNode()
while tmp or l1 or l2:
val = tmp
if l1:
val = l1.val + val
l1 = l1.next
if l2:
val = l2.val + val
l2 = l2.next
tmp = val // 10
val = val % 10
tree.next = ListNode(val)
tree = tree.next
return head.next
不懂的地方:
方法2:
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(-1)
p = dummy
p1 = l1
p2 = l2
carry = 0
while p1 or p2:
sum = 0
if p1:
sum = p1.val
p1 = p1.next
if p2:
sum += p2.val
p2 = p2.next
sum += carry
carry = sum // 10
p.next = ListNode(sum % 10)
p = p.next
if carry:
p.next = ListNode(carry)
return dummy.next
不懂的地方:
方法3:递归法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
if not l1:
return l2
if not l2:
return l1
l1.val += l2.val # 将两数相加,赋值给 l1 节点
if l1.val >= 10:
l1.next = self.addTwoNumbers(ListNode(l1.val // 10), l1.next)
l1.val %= 10
l1.next = self.addTwoNumbers(l1.next, l2.next)
return l1
方法1 与方法2 类似,采用链表,注意进位。
啊啊啊啊好多不懂的