假设我们给出了两个非空链表。这两个列表代表两个非负整数。这些数字以相反的顺序存储。它们的每个节点仅包含一位。将两个数字相加,然后将结果作为链表返回。我们假设两个数字不包含任何前导零,除了数字0本身。因此,如果数字为120 + 230,则链接列表将为[0→2→1] + [0→3→2] = [0→5→3] = 350。
为了解决这个问题,我们将按照以下步骤
取两个列表l1和l2。将head和temp初始化为null
c:= 0
而l1和l2都是非空列表
head.next:=节点和head:=节点
head:=节点和temp:=节点
如果l1为非空,则设置:= 0,否则设置:= l1.val
如果l2为非空,则设置b:= 0,否则设置b:= l2.val
n:= a + b + c
如果n> 9,则c:= 1否则为0
node:=创建一个值为n mod 10的新节点
如果head为null
除此以外
l1:= l1的下一个节点(如果l1存在)
l2:= l2的下一个节点(如果l2存在)
如果c不为零,则
node:=新节点,值为1,位于head:= node的下一个
返回温度
让我们看下面的实现以获得更好的理解
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def print_list(head): ptr = head print('[', end = "") while ptr: print(ptr.val, end = ", ") ptr = ptr.next print(']') class Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode: head = None temp = None c = 0 while l1 or l2: if not l1: a= 0 else: a = l1.val if not l2: b=0 else: b = l2.val n = a +b + c c = 1 if n>9 else 0 node = ListNode(n%10) if not head: head = node temp = node else: head.next = node head = node l1 = l1.next if l1 else None l2 = l2.next if l2 else None if c: node = ListNode(1) head.next = node return temp ob1 = Solution()l1 = make_list([0,2,1]) l2 = make_list([0,3,2]) print_list(ob1.addTwoNumbers(l1, l2))
[0,2,1] [0,3,2]
输出结果
[0,5,3]