返回
深入剖析 LeetCode 725:掌握分隔链表的艺术
前端
2024-02-08 11:42:52
概述
在 LeetCode 725 中,我们的目标是给定一个链表头结点 head
,将其分隔成两个子链表。第一个子链表包含所有值小于 x
的节点,而第二个子链表包含所有值大于或等于 x
的节点。
算法详解
要解决这个问题,我们可以采用以下分步算法:
步骤 1:创建两个新的空链表 left
和 right
。
这两个链表将分别存储小于 x
的节点和大于或等于 x
的节点。
步骤 2:遍历原链表,将节点分配到 left
或 right
。
对于每个节点 node
,如果 node.val
小于 x
,则将其添加到 left
链表;否则,将其添加到 right
链表。
步骤 3:将 left
和 right
链表连接起来。
将 left
链表的尾节点指向 right
链表的头节点,即可得到最终的分隔链表。
代码示例
以下 Python 代码展示了该算法的实现:
def splitList(head, x):
# 创建两个新链表
left = ListNode(0)
right = ListNode(0)
# 创建两个指针,指向新的链表
left_ptr = left
right_ptr = right
# 遍历原链表
while head:
# 将节点分配到 left 或 right 链表
if head.val < x:
left_ptr.next = head
left_ptr = left_ptr.next
else:
right_ptr.next = head
right_ptr = right_ptr.next
# 移动原链表的指针
head = head.next
# 将 left 和 right 链表连接起来
left_ptr.next = right.next
# 返回分隔后的链表
return left.next
技术指南
输入格式
splitList(head, x)
函数接受两个参数:
head
:原链表的头结点x
:分隔值
输出格式
该函数返回分隔后的链表的头结点。
示例输入/输出
输入:
head
:[1, 4, 3, 2, 5, 2]
x
:3
输出:
[1, 2, 2, 4, 3, 5]
解释:
将原链表分隔成两个子链表,其中第一个子链表包含所有小于 3 的节点,第二个子链表包含所有大于或等于 3 的节点。
总结
在本文中,我们深入探讨了 LeetCode 725:“分隔链表”。我们提供了一个清晰易懂的算法详解,并通过代码示例进行了演示。无论是初学者还是有经验的编码人员,都可以在实际编码练习中应用这些知识。掌握分隔链表的艺术将为你解决更复杂的链表问题铺平道路。