[leetcode] 0234回文链表 js实现 图解

/*
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
*/

前置知识: lc0876 链表的中间节点 (用快慢指针找到链表的中间节点)

Lc0234这题的的思路是
1、用快慢指针找到原链表后半部分(找到后半段链表的头指针)。
2、将前半段链表反转。
3、比较反转后的前半段链表和后半段链表。
[leetcode] 0234回文链表 js实现 图解_第1张图片

其中1、2 两步骤可以同时进行。

先看代码
[leetcode] 0234回文链表 js实现 图解_第2张图片

这题有两个需要注意的点
1、奇数长度的链表和偶数长度的链表处理方式不同。
2、反转链表的操作本身。

下面看图解。
奇数长度的链表 slow需要往前走一步
[leetcode] 0234回文链表 js实现 图解_第3张图片

而偶数长度的链表,快慢指针的while循环之后slow指针已经到达了预期的位置
[leetcode] 0234回文链表 js实现 图解_第4张图片

再看反转链表的过程,这是刚接触链表的选手比较难理解的地方

重点在while循环中红框的代码部分
[leetcode] 0234回文链表 js实现 图解_第5张图片
[leetcode] 0234回文链表 js实现 图解_第6张图片
[leetcode] 0234回文链表 js实现 图解_第7张图片
[leetcode] 0234回文链表 js实现 图解_第8张图片

完结。

同步更新到自己的语雀
https://www.yuque.com/dirackeeko/tfpe21/ny24nl7sleaocz5b

你可能感兴趣的:(leetcode链表回文)