Java數據結構-線性表之單鏈表應用-單鏈表合併

問題詳細描述:

  將遞增有序A、B兩鏈表歸併成一個按元素值非遞增(允許有相同值)有序的鏈表C。

解題思路:

  利用A、B兩表遞增有序的特點,依次取出當前結點進行比較,將當前值較小者摘下,插入到C表的頭部,由於採用的是頭插法,最先找到的最小值結點將會在C表的尾部,依次類推,所以得到的C表則爲非遞增有序的。這裏的遞增遞減性質需要根據代碼具體修改實現。已在代碼中給出提示。

/**
     * @TODO 兩個數據元素類型爲“整型”的遞增(或者遞減)單鏈表合併,由a單鏈表調用
     * @param bFoll 單鏈表b
     * @return c 單鏈表c
     * (合併結果爲非遞減(或者非遞增),取決於a,b鏈表的遞增遞減性質和合並函數的插入方法的選取)
     */
    public FOLinkedList<Integer> merge(FOLinkedList<Integer> bFoll){
        FOLinkedList<Integer> c = new FOLinkedList<Integer>();
        FOLinkedNode<Integer> a = (FOLinkedNode<Integer>) this.header;
        FOLinkedNode<Integer> b = bFoll.header;
        Integer eTemp = new Integer(0);
        while(a != null && b != null){
            if(a.getE()<=b.getE()){
                eTemp = a.getE();
                a = a.next;
            }else{
                eTemp = b.getE();
                b = b.next;
            }
            //這裏可以採用頭插法,或者尾插法
            c.add(eTemp);
//          c.addFirst(eTemp);
    }
    if(a == null){
        a = b;
    }
    while(a != null){
        c.add(a.getE());
        a = a.next;
    }
    return c;
}

  將遞增有序的A,B鏈表合併成非遞減的鏈表C,採用尾插法即可實現。
  具體操作需要根據代碼來進行修改,上述代碼中可以修改插入元素的方法爲頭插法或者尾插法。

  該算法的時間性能由兩待合併鏈表的的元素個數來決定,即爲O(m+n)

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