數據結構和算法之美總結——鏈表以及應用場景

底層結構

  1. 數組是需要連續的一整塊內存來進行存儲的,因此如果說開闢一個非常大的內存的話,如果JVM連續性內存不夠那麼就會開闢失敗。而鏈表相反,它通過指針將零散的內存空間串起來使用,使用內存效率比較高。

數據插入

  1. 和數組相反。因爲鏈表是不連續的內存空間,插入和刪除會非常的快

數據查詢

  1. 鏈表要想隨機訪問第 k 個元素,就沒有數組那麼高效了。因爲鏈表中的數據並非連續存儲的,所以無法像數組那樣,根據首地址和下標,通過尋址公式就能直接計算出對應的內存地址,而是需要根據指針一個結點一個結點地依次遍歷,直到找到相應的結點。
  2. 時間複雜度爲O(n)

應用場景舉例以及代碼實現

求鏈表的中間結點

思路:
定義兩個指針fast和slow。slow一次遍歷一個節點,fast一次遍歷兩個節點,由於fast的速度是slow的兩倍,所以當fast遍歷完鏈表時,slow所處的節點就是鏈表的中間節點。

public static Node middleNode(Node head) {
        if (head == null || head.next == null) {
            return head;
        }

        Node slow = head;
        Node fast = head.next;

        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return fast == null ? slow : slow.next;
    }

思路很重要


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