public static Boolean isHasCircle( LinkListNode head )
	{
		if(head==null) return null;
		LinkListNode fast=head;
		LinkListNode slow=head;
		Boolean flag = false;
		while(fast!=null && fast.next!=null )
		{
			fast = fast.next.next;
			slow = slow.next;
			if(fast == slow)
			{
				flag = true;
				break;
			}
		}
		return flag;
	}
public static int lengthCircleOfList(LinkListNode head)
	{
		if(head==null) return -1;
		int count=0;
		
		LinkListNode fast = head;
		LinkListNode slow = head;
		boolean flag =false;
		int sum = 2;    //判断是否为第二次相遇
		while(fast!=null && fast.next!=null)
		{
			fast = fast.next.next;
			slow = slow.next;
			if(fast == slow)
			{
				flag = true;
				sum--;
			}
			if(sum == 0)break;
			if(flag)
			{
				count++;
			}
		}
		
		return count;
	} public static LinkListNode theEnterOfList(LinkListNode head)
	{
		if(head==null) return null;
		LinkListNode fast = head;
		LinkListNode slow = head;
		while(fast!=null && fast.next!=null)
		{
			fast = fast.next.next;
			slow = slow.next;
			if(slow == fast)
			{
				break;
			}
		}
		fast = head;    //将快指针放到链头
		while(slow!=null && fast!=slow)   //相遇时跳出,此节点便是入口
		{
			fast=fast.next;
			slow = slow.next;
		}
				
		return slow;
	} public static boolean isIntersect(LinkListNode head1,LinkListNode head2)
	{
		//将第2个链表尾插到第1个链表末尾
		LinkListNode p =head1;
		while(p.next!=null)
		{
			p=p.next;
		}
		p.next = head2;
		
		
//		LinkListNode temp = theEnterOfList(head1);	//第一个公共节点
//		System.out.println(temp.value);
		
		return  isHasCircle(head1);
	}版权声明:本文为博主原创文章,转载请注明出处。
原文地址:http://blog.csdn.net/u014307117/article/details/47761237