0086. 分隔链表
题目地址(86. 分隔链表)
https://leetcode-cn.com/problems/partition-list/
题目描述
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
前置知识
链表
公司
阿里
腾讯
百度
字节
思路
设定两个虚拟节点,dummyHead1 用来保存小于该值的链表,dummyHead2 来保存大于等于该值的链表
遍历整个原始链表,将小于该值的放于 dummyHead1 中,其余的放置在 dummyHead2 中
遍历结束后,将 dummyHead2 插入到 dummyHead1 后面

(图片来自: https://github.com/MisterBooo/LeetCodeAnimation)
关键点解析
链表的基本操作(遍历)
虚拟节点 dummy 简化操作
遍历完成之后记得
currentL1.next = null;否则会内存溢出
如果单纯的遍历是不需要上面操作的,但是我们的遍历会导致 currentL1.next 和 currentL2.next 中有且仅有一个不是 null, 如果不这么操作的话会导致两个链表成环,造成溢出。
代码
语言支持: Javascript,Python3, CPP
Python3 Code:
CPP Code:
复杂度分析
时间复杂度:$O(N)$
空间复杂度:$O(1)$
大家对此有何看法,欢迎给我留言,我有时间都会一一查看回答。更多算法套路可以访问我的 LeetCode 题解仓库:https://github.com/azl397985856/leetcode 。 目前已经 37K star 啦。 大家也可以关注我的公众号《力扣加加》带你啃下算法这块硬骨头。 
最后更新于
这有帮助吗?