1 . 断链法
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null||pHead.next==null)
return null;
ListNode pre=pHead;
ListNode cur=pHead.next;
while(cur!=null){
pre.next=null;
pre=cur;
cur=cur.next;
}
return pre;
}
}
如果想要避免断链带来的副作用,可以设置一个辅助节点来保存每次遍历过的节点,从而组成一个新链。
2 . Java集合类法
很多集合类都可以选择,这里我选择了ArrayList。
链接:https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4?toCommentId=2529472
来源:牛客网
import java.util.*;
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null)
return null;
List<ListNode> ls=new LinkedList();
while(pHead!=null){
if(ls.contains(pHead))
return pHead;
else
ls.add(pHead);
pHead=pHead.next;
}
if(ls.contains(pHead))
return pHead;
return null;
}
}