单链表成环问题思路:定义两个快慢指针,快指针每次移动2步,慢指针每次移动1步。如果链表成环,快慢指针迟早会相遇;如果链表不成环,快指针->next会指向null;
具体代码实现如下:
class Solution2{
public boolean hasCycle(LinkNode head) {
LinkNode fast = head;//快慢指针
LinkNode slow = head;
while(fast!=null&&fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if(fast==slow){
return true;
}
}
return false;
}
}
public class HasCycle {
public static void main(String[] args){
LinkNode head = null;
LinkNode t1 = new LinkNode(9);
LinkNode t2 = new LinkNode(6);
LinkNode t3 = new LinkNode(8);
LinkNode t4 = new LinkNode(7);
LinkNode t5 = new LinkNode(1);
head = t1;
t1.next = t2;
t2.next = t3;
t3.next = t4;
t4.next = t5;
t5.next = t2;//有环,去掉此句就无环了
Solution2 s = new Solution2();
System.out.println(s.hasCycle(head));
}
}
public class LinkNode {
public int value;
public LinkNode next;
public LinkNode(int x){
value = x;
next = null;
}
}