Python中链表的两数相加(Add Two Numbers II)操作
题目描述:
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加起来,则返回一个新的链表来表示它们的和。
示例:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7
解题思路:
由于两个数的位数可能不同,所以我们需要补齐较短的链表,然后从低位向高位依次相加,并且需要注意进位的情况。
具体实现时,我们可以先遍历两个链表,求出它们的长度。然后将较短的链表补齐到和另一个链表一样长,补齐的节点值为0。接着从低位向高位依次相加,记得考虑进位。最后还要判断高位是否有进位,并根据情况新建一个节点作为链表的头部。
代码演示:
class ListNode:
def init(self, x):
self.val = x
self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 先遍历两个链表,求出它们的长度
len_1, len_2 = 0, 0
p = l1
while p:
len_1 += 1
p = p.next
p = l2
while p:
len_2 += 1
p = p.next
# 将较短的链表补齐到和另一个链表一样长 if len_1 > len_2: for i in range(len_1 - len_2): node = ListNode(0) node.next = l2 l2 = node else: for i in range(len_2 - len_1): node = ListNode(0) node.next = l1 l1 = node # 从低位向高位依次相加,记得考虑进位 dummy = ListNode(0) p = dummy carry = 0 while l1: num = l1.val + l2.val + carry carry = num // 10 num %= 10 node = ListNode(num) p.next = node p = p.next l1 = l1.next l2 = l2.next # 判断高位是否有进位,并根据情况新建一个节点作为链表的头部 if carry: node = ListNode(1) node.next = dummy.next dummy.next = node return dummy.next
测试代码
l1 = ListNode(7)
l1.next = ListNode(2)
l1.next.next = ListNode(4)
l1.next.next.next = ListNode(3)
l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)
s = Solution()
res = s.addTwoNumbers(l1, l2)
while res:
print(res.val, end=' ')
res = res.next
输出结果:7 8 0 7
相关文章