目录
一、题目
给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
二、示例
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
三、思路
这是两个链表 pre, last 分别表示小于 x 的节点 和大于等于 x 的节点
之后将链表 pre 和 last 连接在一起。
四、代码
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
if not head:
return head
pre, last = ListNode(-1), ListNode(-1)
p, q = pre, last
while head:
if head.val < x:
p.next = ListNode(head.val)
p, head = p.next, head.next
else:
q.next = ListNode(head.val)
q, head = q.next, head.next
p.next = last.next
return pre.next
if __name__ == '__main__':
head = ListNode(1)
head.next = ListNode(4)
head.next.next = ListNode(3)
head.next.next.next = ListNode(2)
head.next.next.next.next = ListNode(5)
head.next.next.next.next.next = ListNode(2)
x = 3
s = Solution()
ans = s.partition(head, x)
print(ans)