给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
题解:链表拆分+拼接
新建两个链表,一个链表放小于x的节点,一个链表放大于等于x的节点。最后,拼接这两个链表。
classSolution:
defpartition(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人