【JAVA】力扣-876-链表的中间结点

一、问题

力扣题目链接:链表的中间结点
在这里插入图片描述

二、解题思路

问题的关键也在于我们无法直接得到单链表的长度 n,常规方法也是先遍历链表计算 n,再遍历一次得到第 n / 2 个节点,也就是中间节点。

如果想一次遍历就得到中间节点,也需要耍点小聪明,使用「快慢指针」的技巧:

我们让两个指针 slow 和 fast 分别指向链表头结点 head。

每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。

三、解题代码

        public ListNode middleNode(ListNode head) {
    
    
            ListNode fast =head,slow =head;
            while (fast != null && fast.next != null){
    
    
                slow = slow.next;
                fast =fast.next.next;
            }
            return slow;
        }

猜你喜欢

转载自blog.csdn.net/qq_35156196/article/details/127119039