86. 分隔链表
Difficulty: 中等
给你一个链表和一个特定值x
,请你对链表进行分隔,使得所有小于 x
的节点都出现在大于或等于 x
的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入:head = 1->4->3->2->5->2, x = 3
输出:1->2->2->4->3->5
Solution
我把一个链表拆成了两份,一份大于等x的链表,一份小于x的链表。
最后把他们合起来就可以了。
这种方法的缺点就是空间消耗为O(n)。
其实可以使用两个指针,一个指向大于等于x的链表,就在原地修改。但是我并没有处理好。
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
p = ListNode()#大于等于x
q = ListNode()#小于x
t = head
p1 = p
q1 = q
while t:
if(t.val>=x):
s = ListNode()
s.val = t.val
p.next = s
p = p.next
else:
s = ListNode()
s.val = t.val
q.next = s
q = q.next
t = t.next
q.next = p1.next
return q1.next
# 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:
before = before_head = ListNode(0)
after = after_head = ListNode(0)
while head:
if(head.val<x):
before.next = head
before = before.next
else:
after.next = head
after = after.next
head = head.next
after.next = None
before.next = after_head.next
return before_head.next
```