题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
/* 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||pHead.next==null||pHead.next.next==null) return null; ListNode fast=pHead.next.next; ListNode slow=pHead.next; /先判断有没有环 while(fast!=slow){ if(fast.next!=null&&fast.next.next!=null){ fast=fast.next.next; slow=slow.next; }else{ 没有环,返回 return null; } } 循环出来就是有环,且此时fast==slow fast=pHead; while(fast!=slow){ fast=fast.next; slow=slow.next; } return slow; } }
//这是一种新奇的方法,用HashSet的方法
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.HashSet; import java.util.Set; public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { Set<ListNode> set=new HashSet<ListNode>(); while(pHead!=null){ if(set.contains(pHead)){ return pHead; }else{ set.add(pHead); } pHead=pHead.next; } return null; } }