📅  最后修改于: 2023-12-03 15:26:09.132000             🧑  作者: Mango
给定两个单向链表,每个节点包含一个数字,将它们相加并返回一个新的单向链表。
例如,链表1为 2 -> 4 -> 3,链表2为 5 -> 6 -> 4,其结果应该为 7 -> 0 -> 8
为了求解问题2,我们可以从链表的头部依次遍历两个链表,将相同位置上的数字相加。如果和大于9,则将数字进位,即将此位置上的数字设置为 sum%10,将进位的数字 carry 设置为 1。
另外需要注意的一点是,如果两个链表长度不同,则需要在短链表的末尾添加0节点。
最后,在遍历两个链表的过程中,构造一个新的单向链表用以存放每个节点的和。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 在短链表末尾添加0节点
cur1, cur2 = l1, l2
while cur1 and cur2:
cur1 = cur1.next
cur2 = cur2.next
if not cur1:
while cur2:
node = ListNode(0)
node.next = l1
l1 = node
cur2 = cur2.next
elif not cur2:
while cur1:
node = ListNode(0)
node.next = l2
l2 = node
cur1 = cur1.next
# 计算两个链表的和
cur1, cur2 = l1, l2
res = ListNode(0)
cur3 = res
carry = 0
while cur1 and cur2:
sum = cur1.val + cur2.val + carry
carry = sum // 10
node = ListNode(sum % 10)
cur3.next = node
cur3 = cur3.next
cur1 = cur1.next
cur2 = cur2.next
# 处理链表余下的部分
cur = cur1 if cur1 else cur2
while cur:
sum = cur.val + carry
carry = sum // 10
node = ListNode(sum % 10)
cur3.next = node
cur3 = cur3.next
cur = cur.next
# 处理进位
if carry == 1:
node = ListNode(1)
cur3.next = node
return res.next
本题解决方案的主要思路是从链表的头部依次遍历,计算两个链表上相同节点位置的数字之和并存储到一个新的链表中。需要注意在遍历两个链表的过程中,对链表长度不同的情况进行特殊处理,以及在计算和的过程中需要处理数字进位的情况。