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

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

Lc0234这题的的思路是
1、用快慢指针找到原链表后半部分(找到后半段链表的头指针)。
2、将前半段链表反转。
3、比较反转后的前半段链表和后半段链表。
image.png

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

先看代码
image.png

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

下面看图解。
奇数长度的链表 slow需要往前走一步
image.png

而偶数长度的链表,快慢指针的while循环之后slow指针已经到达了预期的位置
image.png

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

重点在while循环中红框的代码部分
image.png
image.png
image.png
image.png

完结。

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


DiracKeeko
125 声望2 粉丝