目录
题目描述
给你一个链表的头节点 head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5]
示例 2:
输入:head = [2,1], x = 2 输出:[1,2]
提示:
- 链表中节点的数目在范围
[0, 200]
内 -100 <= Node.val <= 100
-200 <= x <= 200
解题过程
第一次错误:
问题:列表p和q被赋值后没有及时更新到下一个结点
改正:
第二次错误:
问题:错误提示中,链表形成了闭环 ,注意,链表引用的是内存地址,要注意链表最后一个数据的指向,在本代码中p的最后一项通过p.next = dummy.next指向了dummy中第二个数据,但dummy最后一项仍指向head中顺次的下一项,因此需要对dummy中最后一项的指向重新分配,修改后如下:
结果:
官方题解(labuladong有可视化)
如我写的带有回环的错误代码,其回环可视化效果如下:
labuladong题解中,每一步链表赋值,指向新地址时,都会断开与原链表的链接,因此避免了回环的情况,我的代码中只为最后一个数据赋予None,避免回环,不知道是否有其他影响。