先上代码:下面这段代码仅判断一个链表是否有环,有环的话,单链表的形状只可能是”O”型或者是“P”型
class Node{
int value;
Node next;
public node(int value){
this.value = value;
}
}
public class Circle {
/**
* 判断链表是否有环,快慢指针法,一个一次走两步,一个一次走一步,如果会相遇则表示有环,如果无环的话,就是遇到null。、
* 链表中有环,只可能是O型或者是P型
*/
public static boolean circle(Node head){
if(head == null || head .next == null || head.next.next == null){
return false;
}
Node fast = head.next.next;//为什么起始值得先跑一步或者两步了,因为循环的条件是快慢指针不等
Node slow = head.next;
while(fast != slow){
if(fast.next != null && fast.next.next != null){//快指针先趟雷null,没有null,一次移动两步
fast = fast.next.next;
slow = slow.next;//fast如果没遇到null,那么slow也不会遇到null
}else{
return false