问题描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度O(1)的解法么?
解题思路
由于这里的链表会存在环,所以单纯的判定尾节点的next是否为null,是不行的,会进入死循环,这时我们可以用一个快慢指针来解决问题,快的指针每次走两步,慢的指针每次走一步,为了更好的判定循环,因为快的走在前,所以用它判断是否继续循环;若是存在环,那么总有那么一次是两个指针指向同一个节点,这时我么返回真就好了。
代码展示
/**
* 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) {
ListNode p1=head;
ListNode p2=head;
while(p2!=null && p2.next!=null){
p1=p1.next;
p2=p2.next.next;
if(p1==p2){
return true;
}
}
return false;
}
}