题目描述
一个链表中包含环,请找出该链表的环的入口结点。
实现:
方法一:
public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { if(pHead==null){ return null; } ListNode p1=pHead; ListNode p2=pHead; while(p1!=null && p2!=null){ p1=p1.next; p2=p2.next; if(p2!=null){ p2=p2.next; } if(p1==p2){ break; } } if(p2==null){ return null; } int count=1; p2=p2.next; while(p2!=p1){ p2=p2.next; count++; } p1=pHead; p2=pHead; for(int i=0; i<count; i++){ p1=p1.next; } while(p1!=p2){ p1=p1.next; p2=p2.next; } return p1; } }方法二:
public class EntryNodeOfLoop { public static ListNode entryNodeOfLoop(ListNode pHead){ if(pHead==null){ return null; } ListNode p1=pHead; ListNode p2=pHead; while(p1!=null && p2!=null){ p1=p1.next; p2=p2.next; if(p2!=null){ p2=p2.next; } if(p1==p2){ break; } } if(p2==null){ return null; } p1=pHead; while(p1!=p2){ p1=p1.next; p2=p2.next; } return p1; } }