本文最后更新于:2023年3月19日 晚上
剑指 Offer II 027. 回文链表
给定一个链表的 头节点 **head
,**请判断其是否为回文链表。
如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
示例 1:
1 2
| 输入: head = [1,2,3,3,2,1] 输出: true
|
示例 2:
1 2
| 输入: head = [1,2] 输出: fasle
|
提示:
- 链表 L 的长度范围为
[1, 105]
0 <= node.val <= 9
思路
快慢指针找到中点,翻转中点之后的链表,从头结点和翻转后的头结点再开始比较每个是否相同即可。
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
var isPalindrome = function (head) { let slow = head, fast = head; while (fast && fast.next) { slow = slow.next; fast = fast.next.next; } let prev = null, temp = null; while (slow) { temp = slow.next; slow.next = prev; prev = slow; slow = temp; } while (prev) { if (head.val !== prev.val) return false; head = head.next; prev = prev.next; } return true; };
|