一. 题目
-
题目
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。
-
示例
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
二. 方法一: 链表拼接
-
解题思路
- 创建两个链表
- 然后遍历原链表, 如果值小于val, 则插入到链表1的末尾; 否则插入到链表2的末尾
- 遍历结束后, 将链表1和链表2拼接在一起即可
-
解题代码
def partition(self, head: ListNode, x: int) -> ListNode: less_list = ListNode(None) more_list = ListNode(None) less_ptr = less_list more_ptr = more_list while head: if head.val < x: less_ptr.next = head less_ptr = head else: more_ptr.next = head more_ptr = head head = head.next less_ptr.next = more_list.next more_ptr.next = None return less_list.next
-
分析
时间复杂度: O(n)
空间复杂度: O(1)