1. 程式人生 > >【劍指Offer】一個連結串列中包含環,請找出該連結串列的環的入口結點。

【劍指Offer】一個連結串列中包含環,請找出該連結串列的環的入口結點。

題目描述

一個連結串列中包含環,請找出該連結串列的環的入口結點。

思路分析

這道題目很簡單,由於單鏈表有環,因而遍歷單鏈表時,會回到環入口。即如果遍歷時第一次發現遍歷過的結點必定就是環入口結點。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; } }