目录
题目
- 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
题解:链表拆分+拼接
- 新建两个链表,一个链表放小于x的节点,一个链表放大于等于x的节点。最后,拼接这两个链表。
class Solution:
def partition(self, head: Optional[ListNode], x: int) -> Optional[ListNode]:
sml_dummy = ListNode(0) # 小于 x 的链表的虚拟头节点
big_dummy = ListNode(0) # 大于等于 x 的链表的虚拟头节点
sml_tail = sml_dummy # 用于追踪小于 x 的链表的尾部
big_tail = big_dummy # 用于追踪大于等于 x 的链表的尾部
p = head
while p:
if p.val < x:
sml_tail.next = p
sml_tail = sml_tail.next#更新尾指针,便于下一个节点的加入
else:
big_tail.next = p
big_tail = big_tail.next
p = p.next
big_tail.next = None # 将大于等于 x 的链表的尾部指向 None,断开与后续节点的连接,没有这句,大于等于 x 的节点后面仍然连接着小于 x 的节点
sml_tail.next = big_dummy.next # 将小于 x 的链表的尾部连接到大于等于 x 的链表的头部
return sml_dummy.next
标签:分隔,big,next,链表,tail,sml,86,节点
From: https://www.cnblogs.com/lushuang55/p/17995325