快指针的慢指针的两倍移动速度,如何在快指针遍历完链表后,慢指针刚好到达链表中部。

剑指 Offer II 027. 回文链表
利用到了快慢指针,不用对奇数情况单独加判断了。
var isPalindrome = function(head) {
if(head.next==null){
return true;
}
let dummy=new ListNode(0);
dummy.next=head;
let slow=dummy,fast=dummy.next;
while(fast!=null){
slow=slow.next;
fast=fast.next;
if(fast!=null){
fast=fast.next;
}
}
let lastnode=slow.next;
slow.next=null;
let node=reverseList(lastnode);
while(node!=null){
if(node.val!=head.val){
return false;
}
node=node.next;
head=head.next;
}
return true;
};
var reverseList=function(node){
let prev=null;
let cur=node;
while(cur!=null){
let temp=cur.next;
cur.next=prev;
prev=cur;
cur=temp;
}
// 注意不能返回node,因为此时头节点已经变成原来的尾节点了
return prev;
}
本文介绍了一种使用快慢指针的方法来判断链表是否为回文结构,通过一次遍历实现无需额外空间。核心思路是利用快指针找到链表中点,反转后半部分链表,再比较前后两部分是否相等。
2119

被折叠的 条评论
为什么被折叠?



