LeetCode-2 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class LinkList:
# 新建一个头指针为空的链表
def __init(self):
self.head = None
# 将数据插入链表
def initList(self,data):
# 创建头结点
self.head = ListNode(data[0])
r = self.head
p = self.head
# 逐个为data内的数据创建结点,建立链表
for i in data[1:]:
node = ListNode(i)
p.next = node
p = p.next
return r
def printlist(self, head):
if head == None: return
node = head
while node != None:
print(node.val, end = ' ')
node= node.next
def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
head = ListNode(0) # 初始化链表头结点为0
node = head
carry = 0 # 进位标志位,传递0或1
while l1 or l2:
x = l1.val if l1 else 0
y = l2.val if l2 else 0
sum = x + y + carry
carry = sum // 10 # 更新进位
node.next = ListNode(sum % 10)
if l1:
l1 = l1.next
if l2:
l2 = l2.next
node = node.next # 更新结点
if carry != 0: # 循环完后检查最后一位是否有进位
node.next = ListNode(1)
return head.next
if __name__ == '__main__':
l = LinkList()
data1 = [2, 4, 3]
data2 = [5, 6, 4]
l.printlist(addTwoNumbers(l.initList(data1), l.initList(data2)))
结果为