欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode题库:给定一个带有头结点 head 的非空单链表,返回链表的中间结点,如果有两个中间节点则返回第二个

程序员文章站 2022-07-10 20:22:14
...

要求:给定一个带有头结点 head 的非空单链表,返回链表的中间结点
测试案例:1-2-3-4-5
输出结果:3
测试案例:1-2-3-4-5-6
输出结果:4

    public Node middleNode() {
        if (this.head == null) {
            return null;
        }
        //快慢指针:定义两根指针,移动的速度一快一慢,以此来制造出自己想要的差值。这个差值可以让我们找到链表上相应的节点。
        Node fast = this.head;
        Node slow = this.head;
        while (fast != null && fast.next != null) {
            //fast!=null适用于偶数长度的链表,fast.next!=null使用于奇数长度的链表
            // 如果fast.next为空,那么fast.next.next则会出现指针异常。所以限定条件时fast和fast.next都不能为空
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;
    }

推荐阅读