刷題No27. linked-list-cycle-ii(環形鏈表ii)(java)【鏈表】

題目:對於一個給定的鏈表,返回環的入口節點,如果沒有環,返回null

思路:找到鏈表中的環中的一個節點(快慢指針相遇處),一個指針從相遇處出發,一個指針從鏈表頭節點出發,相遇處即爲鏈表中環的起始點。

代碼:

package com.company;

public class TestNo27 {
    static class ListNode{
        int val;
        ListNode next;
        ListNode(int x){
            val = x;
            next = null;
        }
    }
    public static void main(String[] args) {
        ListNode head = new ListNode(9);
        head.next = new ListNode(4);
        head.next.next = new ListNode(5);
        head.next.next.next = new ListNode(7);
        head.next.next.next.next = new ListNode(8);
        head.next.next.next.next.next = head;
        TestNo27 t = new TestNo27();
        System.out.println(t.detectCycle(head).val);


    }
    public ListNode detectCycle(ListNode head) {
        if(head == null || head.next == null || head.next.next == null){
            return null;
        }
        ListNode fast = head.next.next;
        ListNode slow = head.next;
        //進行判斷是否有環,找到相遇點
        while (fast!=slow){
            if(fast.next!=null && fast.next.next != null){
                fast = fast.next.next;
                slow = slow.next;
            }else{
                return null;
            }
        }
        fast = head;
        while (fast != slow){
            fast = fast.next;
            slow = slow.next;
        }
        return fast;


    }

}

 

發佈了64 篇原創文章 · 獲贊 13 · 訪問量 4374
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章