题目
题目描述
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例 2:
输入:head = [2,1], x = 2
输出:[1,2]
提示:
链表中节点的数目在范围 [0, 200] 内
-100 <= Node.val <= 100
-200 <= x <= 200
题解
要解决这个问题,我们可以创建两个新的链表:一个用于存储所有小于 x
的节点,另一个用于存储所有大于或等于 x
的节点。然后,我们将这两个链表连接起来,以保持原始链表中每个分区内的相对顺序。
算法步骤
- 初始化两个链表:创建两个哑节点(dummy nodes),分别作为小于
x
和大于等于x
链表的头部。哑节点可以帮助简化边界条件处理。 - 遍历原链表:使用一个指针遍历原始链表,并根据节点值与
x
的比较结果,将节点添加到对应的链表尾部。 - 连接两个链表:当遍历完成后,将小于
x
的链表尾部指向大于等于x
的链表头部,并确保最后一个节点的next