Python中链表的两数相加(Add Two Numbers II)操作

2023-04-11 00:00:00 操作 链表 相加

题目描述:

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加起来,则返回一个新的链表来表示它们的和。

示例:

输入: (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

相关文章