1、判断一个链表是否有环
public boolean hasCircle(ListNode pHead) {
if(pHead == null)
return false;
ListNode fast = pHead, slow = pHead;
while(fast != null) {
if(fast.next != null)
fast = fast.next.next;
else
fast = fast.next;
slow = slow.next;
if(fast == slow)
return true;
}
if(fast == null)
return false;
}
2、求一个有环链表的长度
3、求一个有环链表的环的首结点
4、求一个链表的长度
public int lenOfCircle(ListNode pHead) {
if(pHead == null)
return 0;
ListNode fast = pHead, slow = pHead;
while(fast != null) {
if(fast.next != null)
fast = fast.next.next;
else
fast = fast.next;
slow = slow.next;
if(fast == slow)
break;
}
if(fast == null)
return 0;
int len = 1;
slow = slow.next;
while(slow != fast) {
slow = slow.next;
len++;
}
return len;
}/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null)
return null;
ListNode pNode, fast = pHead, slow = pHead;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if(fast == slow)
break;
}
if(fast == null || fast.next == null)
return null;
slow = pHead;
while(slow != fast) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}