解
维护两个链表
- 小于x的链表
- 大于等于x的链表
之后更新两个链表的尾部的next
- 小于x的尾部 链接到 大于等于x的尾部
- 大于等于x的尾部 链接到 None (避免可能出现的循环)
# 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:
if not head or not head.next:
return head
# 小于x的链表头部和尾部
head_l = ListNode(-1)
tail_l = head_l
# 大于或等于x的链表头部和尾部
head_r = ListNode(-1)
tail_r = head_r
cur = head
while cur:
if cur.val < x:
tail_l.next = cur
tail_l = cur
else:
tail_r.next = cur
tail_r = cur
cur = cur.next
# 更新两个链表的尾部的next
# 小于x的链表尾部 链接到 大于或等于x的链表头部
tail_l.next = head_r.next
# 将大于或等于x的链表尾部 的next设为None 避免可能出现的循环
tail_r.next = None
return head_l.next