设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。
/**
* 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 p = head;
ListNode a = p.next.next;
if(p.equals(a))return true;
while(p!=null&&a!=null){
if(p.equals(a))return true;
else{
p=p.next;
if(a.next!=null){
a=a.next.next;
}else{
break;
}
}
}
return false;
}
}
本文介绍了一种使用快慢指针检测链表中是否存在环的有效方法。通过设置两个指针,一个每次移动一步,另一个每次移动两步,在链表中进行遍历。如果链表存在环,快指针将追上慢指针,从而判断出链表包含环。
822

被折叠的 条评论
为什么被折叠?



