算法挑战53: 链表的中间节点

4 阅读1分钟

题目

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

思路:

暴力可以过

使用双指针更优雅

慢指针走一步, 快指针走两步

while循环条件是 快指针和快指针的下一个节点不能是null

当循环结束时, fast就指向null

这时slow必指向链表的中间节点

代码:

var middleNode = function (head) {
    //快慢指针
    //满指针走一步,快指针走两步
    let slow = head;
    let fast = head;

    while (fast !== null && fast.next !== null) {
        slow = slow.next;
        fast = fast.next.next;
    }
    return slow;

};