packagecircle_single_link;
/**
* @authorzhou shengshuai
*
*/
class Node {
String info= "";
Node nextN= null;
public Node(String info, Node nextN) {
this.info= info;
this.nextN= nextN;
}
}
class CircleLink {
public static void isCircleLink(Node firstN) {
Node point1 = firstN;
Node point2 = firstN;
/*
* This do...while block judge whether thislink is circle or not.
*/
do{
point1 = point1.nextN;
System.out.print(point1.info+"\t||\t");
point2 = point2.nextN.nextN;
System.out.println(point2.info);
} while(point2.nextN !=null && point1 != point2);
/*
* if Node.next is null, it explain this linkisn't circle link.
*/
if(point2.nextN ==null)
return;
/*
* This while block find the circle node.
*/
point2 = firstN;
while(point2 != point1) {
point2 = point2.nextN;
point1 = point1.nextN;
}
System.out.println("The First Circle Link Node is: " + point1.info);
}
}
public class SingleLinkWithCircle {
/**
* @param args
*/
public static void main(String[] args) {
Node node5 = newNode("5",null);
Node node4 = newNode("4", node5);
Node node3 = newNode("3", node4);
Node node2 = newNode("2", node3);
Node node1 = newNode("1", node2);
node5.nextN= node2;
CircleLink.isCircleLink(node1);
}
}