题目描述:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5
解法1。在现有链表的基础上新建2个链表,一个按序存储小于x的节点,一个存储>=x的节点,最后把这两个子链表链接起来
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
pre_min = cur_min = ListNode(0)
pre_max = cur_max = ListNode(0)
cur = head
while cur:
if cur.val < x:
cur_min.next = cur
cur_min = cur_min.next
else:
cur_max.next = cur
cur_max = cur_max.next
cur = cur.next
cur_min.next = pre_max.next
cur_max.next = None
return pre_min.next