用指针可以解决,遍历一遍解决
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
Nhead = pre = ListNode(next=head)
cur = head
# 找到前面的小于x的最大位置
while cur:
if cur.val>=x:
break
cur = cur.next
pre = pre.next
p1 = pre
p2 = cur
while cur:
if cur.val < x:
p1.next = cur
p1 = p1.next
if cur.next:
cur = cur.next
pre.next = cur
else:
pre.next = cur.next
break
else:
pre = pre.next
cur = cur.next
p1.next = p2
return Nhead.next