力扣—获取链表的中间节点(快慢指针)

获取链表的中间节点

思路 使用快慢指针,在时间相同的情况下快指针路程是慢指针两倍,fast指针走两步 slow指针走一步 fast走完后,slow正好是中间节点的位置。
//fast!= null 是节点有偶数个时,fast一次走两步,走完时fast为空
//fast.next!=null 是节点有奇数个时,fast一次走两步,走完时fast.next是NULL

力扣—获取链表的中间节点(快慢指针)_第1张图片

class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode fast = head;//快指针
        ListNode slow = head;//慢指针
        //fast!=null 要在fast.next!=null 前判断 因为如果fast为空,先判断fast.next会空指针异常
        while(fast != null &&  fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        return slow;
    }
}

运行结果
力扣—获取链表的中间节点(快慢指针)_第2张图片

你可能感兴趣的:(力扣,链表,leetcode,数据结构)