题解 | #判断链表中是否有环#

判断链表中是否有环

https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

public boolean hasCycle(ListNode head) {
        //参数校验
        if(head == null || head.next == null) return false;
        //定义两个快慢节点
        ListNode fast = head;
        ListNode slow = head;
        //只要快电接点不为空 或者快界定的下一个为空 就结束循环
        while(fast != null && fast.next != null){
            //快节点每次都两步
            fast = fast.next.next;
            //满节点每次走一步
            slow = slow.next;
            if(fast == slow){
                //快慢节点相遇 说明当前链表中有环
                return true;
            }
        }
        //循环结束 方法没有结束 说明快慢节点没有相遇,链表中没有环
        return false;
}

解题思路:
1、如果链表中有环,那么遍历这个循环时一定会有环状循环
2、此时我们可以定义两个快慢指针,快指针一次走两步,慢指针一次走一步
3、如果这个链表中存在环,那么一定在会在一个环内无限循环,则快慢指针一定会相遇
4、相遇之后快慢指针此时相等,只需要判断如果快慢指针相等,那就可以确定此时链表中一定存在一个环

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务