题目地址:链接
题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
示例输出:
输入:head = [1,2,2,1]
输出:true
快慢指针,反转链表
- 使用快慢指针找到中间节点
- 翻转后面的链表,后一段头节点设置为tail
- 比较tail和head,直到tail为null为止。
function middleNode(head) {
let [q, s] = [head, head];
while(q && q.next) {
q = q.next.next;
s = s.next;
}
return s;
}
function reverseNode(head) {
let [q, cur] = [null, head];
while(cur) {
let ne = cur.next;
cur.next = q;
q = cur;
cur = q;
}
return q;
}
var isPalindrome = function(head) {
let half = middleNode(head);
let tail = reverseNode(half);
while(tail) {
if(tail.val != head.val) return false;
tail = tail.next;
head = head.next;
}
};
8万+

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



