LeetCode-第876题-链表的中间结点

1.题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

2.样例描述

LeetCode-第876题-链表的中间结点_第1张图片

3.思路描述

创建两个快慢指针 slow , fast ,起始共同指向头节点,slow 每次走一步,fast 每次走两步,当 fast 为空或 fast 的下一个结点为空时,slow  即是中间节点的位置。由于 fast 每次走两步,slow 每次走一步,slow 总是落后 fast 整体一半的长度最终 slow 理应为中间结点。

LeetCode-第876题-链表的中间结点_第2张图片

LeetCode-第876题-链表的中间结点_第3张图片

4.代码展示 

class Solution {
    public ListNode middleNode(ListNode head) {
        //快慢指针法:定义两个指针,快指针每次走两位,慢指针每次走移位,当快指针所在的位置或下一位为null时,慢指针的位置是链表的中点
        ListNode fast = head;
        ListNode slow = head;
        //遍历链表,当当快指针所在的位置或下一位不为null时,执行循环
        while(fast !=null && fast.next != null)
        {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
}

你可能感兴趣的:(LeetCode,leetcode,链表,算法,java)