題目描述:
給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。
思路:
思路1:設置快慢指針,剛開始快慢指針同時指向某一個節點,然後進行next,當快慢指針再次相遇的時候,說明該鏈表有環。
思路2:使用HashSet存儲節點,遍歷將節點加入hashSet,如果存在環,那麼入口節點就是那個在HashSet裏第一個重複的節點。下面是思路2的代碼。(思路1的代碼leetcode刷題列表裏有)
代碼:
package offer01;
import java.util.HashMap;
import java.util.HashSet;
public class TestNo55 {
static class ListNode{
int val;
ListNode next;
ListNode(int val){
this.val = val;
}
}
public static void main(String[] args) {
ListNode node = new ListNode(0);
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
node.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node;
System.out.println(new TestNo55().EntryNodeOfLoop(node).val);
}
public ListNode EntryNodeOfLoop(ListNode pHead)
{
HashSet<ListNode> set = new HashSet<>();
while (pHead != null){
if(set.contains(pHead)){
return pHead;
}
set.add(pHead);
pHead = pHead.next;
}
return null;
}
}