LeetCode 专题灵神算法
链表 - 快慢指针
视频精讲:链表 - 快慢指针
例题
876. 链表的中间结点
题目链接:返回单链表的中间节点;节点数为偶数时返回第二个中间节点。
示例:输入
head = [1,2,3,4,5],输出从节点 3 开始的链表[3,4,5]。
- 快慢指针,找中间值,脑海里模拟一下就行
var middleNode = function(head) {
let fast = head,slow = head;
while(fast !== null && fast.next !== null){
fast = fast.next.next;
slow = slow.next
}
return slow;
};141. 环形链表
题目链接:判断链表中是否存在通过不断访问 next 能再次到达的环。
示例:输入
head = [3,2,0,-4], pos = 1,输出true。
var hasCycle = function (head) {
//快慢指针,模拟发现,必然会在环内相遇,判断相遇就行
let fast = head, slow = head;
while (fast && fast.next) {
fast = fast.next.next;
slow = slow.next;
if(fast === slow) return true
}
return false;
};142. 环形链表 II
题目链接:返回链表开始入环的第一个节点;无环则返回 null。
示例:输入
head = [3,2,0,-4], pos = 1,输出索引为 1、值为 2 的节点。
- 在上一题的基础上,要找入口
- 脑海里模拟
143. 重排链表
题目链接:把链表按首、尾、次首、次尾的顺序原地重新排列。
示例:输入
head = [1,2,3,4],输出[1,4,2,3]。
作业
234. 回文链表
题目链接:判断单链表的节点值序列是否为回文。
示例:输入
head = [1,2,2,1],输出true。
评论