返回
用python手刃Leetcode(2):两数相加
闲谈
2023-10-25 17:51:03
用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.val
和l2.val
可以获取链表节点的值。 - 使用
sum // 10
和sum % 10
可以分别获取相加结果的进位和个位。 - 使用
current.next = ListNode(sum % 10)
可以将新节点添加到链表中。 - 使用
current = current.next
可以将当前节点移动到下一个节点。 - 使用
l1 = l1.next
和l2 = l2.next
可以将链表指针移动到下一个节点。
结语
以上就是使用Python解决Leetcode第2题“两数相加”的方法。希望这篇文章能够帮助大家更好地理解和掌握该算法。如果您有任何问题,欢迎在评论区留言。