给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
链接:https://leetcode.com/problems/partition-list/
解题思路:
此题类似于数组中将元素以k为界线分放,思路相同,采用双指针。慢指针记录待插位置,快指针寻找待插结点。
我的代码:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
if head and head.next:
fast = ListNode(-1)
fast.next = head
pre2 = head = fast
fast = head.next
while fast and fast.val < x:
pre2 = fast
fast = fast.next
if fast and fast.next:
pre1 = pre2
slow = fast
pre2 = fast
fast = fast.next
else:
return head.next
while fast:
if fast.val < x:
temp = fast.next
pre1.next = fast
fast.next = slow
pre1 = fast
pre2.next = temp
fast = temp
else:
pre2 = fast
fast = fast.next
head = head.next
return head
Time: O(N)
Space: O(1)