和查找是否包含环形链表思路没区别,一致next去检测,当遍历过的部分包含即将要遍历的部分就说名有环形链表,而第一个出现的就是环形链表的入口:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode checkNode = new ListNode(0); ListNode end = checkNode; ListNode root = pHead; while(root != null){ ListNode temp = root; root = root.next; temp.next = null; end.next = temp; end = temp; if(checkContains(checkNode,root)){ return root; } } return null; } boolean checkContains(ListNode toCheck,ListNode item){ while(toCheck != null){ if(toCheck.equals(item)){ return true; } toCheck = toCheck.next; } return false; }
}