合併兩個有序單鏈表 Java

2021-08-09 16:43:20 字數 786 閱讀 3504

準備兩個鍊錶l1和l2:

判斷是否有鍊錶為空:如果l1為空,則不用比較直接返回l2,如果l1為空,則直接返回l2;

比較l1和l2節點,選出最小的那個節點,將該節點設為合併後的鍊錶的head(頭)節點,同時將指向該節點的l1或l2後移,方便接下來的比較;

設定乙個變數temp指向head節點,用於之後連線其它節點;

再比較l1和l2節點,同樣選出小的那個節點,將該節點設為合併後的鍊錶的第二個節點,用temp.next表示該節點,同時將指向該節點的l1或l2後移;

重複比較l1和l2節點,直到l1或l2節點為null;

此時,必定有乙個鍊錶中的所有節點都放入了新鍊錶中,只要將另乙個鍊錶中的剩餘的所有節點都接到新鍊錶之後就可以了。

public

class listnode

}

class solution 

if (l2 == null)

if (l1.val

<= l2.val) else

listnode temp = head;

//接著比較兩個鍊錶,對兩個鍊錶中的最小的節點進行比較選出最小的,也就是合併後的第二小的節點,迴圈知道有乙個鍊錶為空

while (l1 != null && l2 != null) else

temp = temp.next;

}if (l1 == null)

if (l2 == null)

return head;

}}

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...