JZ16 合併兩個排序的列表

2021-10-08 07:16:42 字數 1590 閱讀 7828

題目描述:

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

題解:

我們已知是兩個遞增的鍊錶,需要把他合併成乙個遞增的鍊錶。

(1)我們需要乙個結果鍊錶,表示最後合併後的鍊錶。

(2)遍歷兩個鍊錶,如果 cur1 < cur2,那麼就說明 list1 的當前結點小於 list2 的當前結點,那麼就需要把 cur1 排在前面,同時 cur1 也要後移。如果 cur1 >= cur2,那麼就說明 list1 的當前結點大於 list2 的當前結點,那麼就需要把 cur2 排在前面,同時 cur2 也要後移。

(3)我們需要注意的是,結果鍊錶要繼續合併鍊錶,那麼就需要乙個 last 來標記當前結果鍊錶的最後乙個結點。last.next = cur ,就可以直接將我們比較得到的資料放置在鍊錶末尾。

(4)重複步驟2,直至其中乙個鍊錶遍歷結束。

遍歷至 cur2 為空時,直接將 cur1 放置 res鍊錶最末尾/。

最終得到合併之後的遞增鍊錶

//結果鍊錶

listnode last = null;

//結果鍊錶的最後乙個結點

while

(cur1 != null && cur2 != null)

else

// 更新 last 和 cur1

last = cur1;

cur1 = cur1.next;

}else

else

// 更新 last 和 cur2

last = cur2;

cur2 = cur2.next;

}// 更新位置之後,必然會在某時某個鍊錶遍歷結束

// 如果 cur1 遍歷結束,則直接把剩下的 cur2 跟在後面

if(cur1 != null)

else

}return res;

}

JZ16 合併兩個排序的鍊錶

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。eg 輸入,輸出 題外話 小范說合在一起,再比大小不就完事了,這顯然是乙個簡單的方法,但不智慧型。官方解法 1.迭代版本求解 初始化 定義cur指向新鍊錶的頭結點 操作 1.如果l1指向的結點值小於...

合併兩個排序的列表

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。輸入 返回值 由於兩個鍊錶都是遞增的,所以我們可以在遍歷的同時,判斷每個鍊錶當前各自值的大小,取出較小的那個,作為新鍊錶的結點,否則取另乙個,直到乙個鍊錶為空,將剩下乙個鍊錶拼接至新鍊錶尾端 注意 建立鍊錶使...

17 合併兩個排序的列表

一般的寫法 public class solution else p p.next if list1 null if list2 null p.next null return head.next 但是,我這樣並不是乙個好答案,因為我每一次都進行了new的操作,浪費了大量的空間!進行簡化後,如下 p...