返回

用python手刃Leetcode(2):两数相加

闲谈

用python手刃Leetcode(2):两数相加

大家好,我是[你的名字],一位技术博客创作专家。今天,我将与大家分享如何使用Python解决Leetcode第2题“两数相加”。

问题

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

你可以假设除了数字0之外,这两个数字都不会以零开头。

解决思路

这道题的解决思路非常简单,我们可以将两个链表看成两个数字,然后按照正常的加法规则进行相加。如果两个链表的长度不同,那么我们可以使用一个哨兵节点来对齐两个链表的长度。

Python实现

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def addTwoNumbers(l1, l2):
    dummy = ListNode(0)
    current = dummy
    carry = 0

    while l1 or l2 or carry:
        val1 = l1.val if l1 else 0
        val2 = l2.val if l2 else 0
        sum = val1 + val2 + carry
        carry = sum // 10
        current.next = ListNode(sum % 10)
        current = current.next
        l1 = l1.next if l1 else None
        l2 = l2.next if l2 else None

    return dummy.next

# 示例输入
l1 = ListNode(2)
l1.next = ListNode(4)
l1.next.next = ListNode(3)

l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)

# 调用函数并打印结果
result = addTwoNumbers(l1, l2)
while result:
    print(result.val, end=" ")
    result = result.next

运行结果

7 0 8

额外技巧和建议

  • 使用哨兵节点可以简化代码,并且可以避免处理链表长度不同的情况。
  • 在Python中,可以使用ListNode(0)来创建一个哨兵节点。
  • 使用while循环可以遍历链表。
  • 使用l1.vall2.val可以获取链表节点的值。
  • 使用sum // 10sum % 10可以分别获取相加结果的进位和个位。
  • 使用current.next = ListNode(sum % 10)可以将新节点添加到链表中。
  • 使用current = current.next可以将当前节点移动到下一个节点。
  • 使用l1 = l1.nextl2 = l2.next可以将链表指针移动到下一个节点。

结语

以上就是使用Python解决Leetcode第2题“两数相加”的方法。希望这篇文章能够帮助大家更好地理解和掌握该算法。如果您有任何问题,欢迎在评论区留言。