题解 | #判断链表中是否有环#
判断链表中是否有环
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、相遇之后快慢指针此时相等,只需要判断如果快慢指针相等,那就可以确定此时链表中一定存在一个环