📅  最后修改于: 2023-12-03 14:50:48.122000             🧑  作者: Mango
本题是一道关于数据结构的问题,考察程序员对链表的熟练使用。
给定两个按递增顺序排序的链表a
和b
,请将它们合并成一个新的有序链表,返回新链表的头节点。
a = 1 -> 3 -> 5 -> None
b = 2 -> 4 -> 6 -> None
合并之后得到的新链表应该是:
result = 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> None
题目要求我们将两个有序链表合并成一个新的有序链表,显然从两个有序链表的头节点开始比较,选择较小的节点,指向这个节点,然后继续向下比较,直到其中一个链表为空,此时将另一个链表剩余部分的节点全部添加到新链表中即可。
我们可以使用递归或者迭代的方式来实现链表的合并,这里我提供一种迭代的解法,时间复杂度为O(n)。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(-1) # 定义一个dummy节点作为新链表的头节点
cur = dummy # 定义一个指针cur指向dummy节点
while l1 and l2:
if l1.val < l2.val:
cur.next = l1 # 将当前节点指向l1
l1 = l1.next # l1向下移动一位
else:
cur.next = l2 # 将当前节点指向l2
l2 = l2.next # l2向下移动一位
cur = cur.next # 当前节点指向下一个节点
cur.next = l1 or l2 # 将剩余的节点添加到新链表中
return dummy.next # 返回新链表的头节点
链表合并是一个非常经典的问题,也是面试中常被考到的题目。解决这类问题,我们需要掌握链表的基本操作和数据结构算法的思想,同时要注意边界情况和代码的优化。