题解 | #判断链表中是否有环#
判断链表中是否有环
https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
// 用双指针问题来解决
// 定义两个快慢指针,快指针走两步,慢指针走一步,他们存在速度差
// 如果环存在,那么慢指针一定可以追上快指针,否则追不上
if(head == null || head.next == null ){
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while(slow != fast){
if(fast == null || fast.next == null){
// 说明链表能走到末端,不存在还
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
思路很简单,定义两个指针,快慢指针,存在速度差。如果单链表,slow一直追不上fast,只能把链表走完,那就是fast为空或者fast.next为空,因为定义了fast的步长为2。如果可以追上,说明存在环。
要注意一开始head为null,或者只有一个节点的情况,一开始直接return,否则程序会越界。

查看2道真题和解析