【劍指Offer】一個連結串列中包含環,請找出該連結串列的環的入口結點。
阿新 • • 發佈:2019-02-13
題目描述
一個連結串列中包含環,請找出該連結串列的環的入口結點。
思路分析
這道題目很簡單,由於單鏈表有環,因而遍歷單鏈表時,會回到環入口。即如果遍歷時第一次發現遍歷過的結點必定就是環入口結點。java中HashSet的add方法可輕鬆判斷。當add新的元素時,返回true,否則返回false。
程式碼實現
import java.util.Set;
import java.util.HashSet;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
// 靈機一動,HashSet真是個好東西
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead == null || pHead.next == null){
return null;
}
ListNode current = pHead;
Set<ListNode> set = new HashSet();
// 當set中不存在當前結點,就把當前結點儲存在Set中
while(set.add(current)){
current = current.next;
}
// 當放不進去了,說明該結點Set中已經存在,即連結串列的環入口結點
return current;
}
}