题干:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5
算法思想:将小于x的元素单独拿出来,最后分成两个链表,一个全是小于x的元素,还有一个全是大于x的元素,再将两个链表连接即可
class Solution:
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
if head == None or head.next == None:
return head
dummy, small = ListNode(0), ListNode(0)
dummy.next, q, pre, p = head, small, dummy, head
while p:
if p.val < x:
pre.next = p.next
q.next = p
q = q.next
p = pre.next
else:
pre, p = pre.next, p.next
q.next = dummy.next
return small.next