劍指offerNo55. 鏈表中環的入口結點(Java)

題目描述:

給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出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;
    }
}

天越黑,星星越亮  ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章