演算法題中的連結串列

山有木xi發表於2019-08-11

這兩天在網上刷演算法題,做著做著發現關於連結串列的題目簡直不要太多,

先上一題原題,難度:困難


合併  個排序連結串列,返回合併後 的排序連結串列。請分析和描述演算法的複雜度。

示例:

輸入:[
  1->4->5,
  1->3->4,
  2->6
]輸出: 1->1->2->3->4->4->5->6


首先我所做的的連結串列是 一種根據元素節點邏輯關係排列起來的一種資料結構。利用連結串列可以儲存多個資料,連結串列和陣列的區別在於,陣列的長度是固定的,而實際應用中會經常遇到的長度都是不確定的

是不是看起來有點眼熟,然後我翻開了880,沒錯,這不是和集合一樣嗎,然後翻書,查資料


連結串列是一種資料結構

LinkedList就是以連結串列為資料結構的一種集合

而ArrayList則是以陣列為資料結構的集合


懂了!

之後就好做了

關於這道題,其實有好幾種解法

第一種:暴力

  • 遍歷所有連結串列,將所有節點的值放到一個陣列中。
  • 將這個陣列排序,然後遍歷所有元素得到正確順序的值。
  • 用遍歷得到的值,建立一個新的有序連結串列。

第二種:逐一比較

  • 比較K個節點,然後找到最小的那個數的節點

  • 將選中的節點接在最終節點最後

  • 迴圈上面的步驟

第三種:兩兩合併

  • 將兩個連結串列合併成一個連結串列

class Solution {
    public ListNode mergeTwoLists(ListNode L1, ListNode L2) {
        if (L2 == null) {
            return L1;
        }
        else if (L1 == null) {
            return L2;
        }
        else if (L1.val < L2.val) {
            L1.next = mergeTwoLists(L1.next, L2);
            return L1;
        }
        else {
            L2.next = mergeTwoLists(L1, L2.next);
            return l2;
        }
    }
}

(遞迴牛批!)

其實想通了以後就蠻簡單的,說是困難的難度,其實主要就是考察連結串列的理解和應用

連結串列的應用在日常生活中沒有比陣列低



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2653345/,如需轉載,請註明出處,否則將追究法律責任。

相關文章