题目:
Given a singly list. Check if it is circular.
Code:
import java.util.*;
class Test{
public static void main(String[] args){
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = new Node(3);
Node n4 = new Node(4);
Node n5 = new Node(4);
Node n6 = new Node(7);
Node n7 = new Node(8);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = n6;
n6.next = n7;
n7.next = n2;
Solution sol = new Solution();
System.out.println(sol.isCir(n1));
}
}
class Solution{
public boolean isCir(Node head){
if(head==null) return false;
Node slow = head, fast = null;
if(slow.next!=null && slow.next.next!=null) fast = slow.next.next;
else return false;
while(fast.next!=null && fast.next.next!=null){
if(slow==fast) return true;
slow = slow.next;
fast = fast.next.next;
}
return false;
}
}
class Node{
Node next;
int val;
Node(int val){
next = null;
this.val = val;
}
}
小结:
CC150原题,Two Pointers,不同的遍历速度,看看是否会相交于一点。