Easton Notes
LeetCode 专题灵神算法

链表 - 快慢指针

来源:基础算法精讲 by 灵茶山艾府

视频精讲:链表 - 快慢指针

例题

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。

评论

On this page