面試題25 合併兩個排序的鍊錶

2021-10-11 04:23:52 字數 1068 閱讀 3556

題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

方法1:將 l2 中的結點乙個個插入到 l1 中

我想得有點複雜了,這種邏輯比較難理解

要處理 li = [2, 3],l2 = [1] 這種,對頭節點進行處理。還有就是鍊錶判空和尾部處理問題

public listnode mergetwolists

(listnode l1, listnode l2)

if(l2 == null)

listnode node1 = l1, node2 = l2, subhead2 = l2.next;

// 第一次 l1 頭節點處理

if(node1.val > node2.val)

// 逐個把 l2 中的結點 node2 插入到 node1 後面

while

(node2 != null)

if(node1.val <= node2.val)

else}}

return l1;

}

方法2:建立乙個偽頭結點,逐漸將 l1 和 l2 加入到偽頭結點後面,直到 l1 或 l2 為空,再把剩下的串起來。用偽頭結點的好處就是不用特殊處理 l1 和 l2 的頭結點

思路是真的清晰,網友真不錯

public listnode mergetwolists

(listnode l1, listnode l2)

if(l2 == null)

listnode fakehead =

newlistnode(0

);listnode node = fakehead;

while

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

else

node = node.next;}if

(l1 == null)

node.next = l1;

return fakehead.next;

}

面試題25 合併兩個排序鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。include include list.h using namespace std struct listnode listnode mergetwolists listnode phead1,listnode p...

面試題25 合併兩個排序的鍊錶

一 題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。例如輸入圖3.11中的鍊錶1和鍊錶2,則合併之後的公升序鍊錶如鍊錶3所示。二 關鍵 1.遞迴過程,使用遞迴函式解決。2.乙個鍊錶是空的,結果是不為空的那個。三 解釋 1.合併兩個鍊錶的過程 鍊錶1的頭結點的值小於...

面試題25 合併兩個排序的鍊錶

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是遞增排序的。定義兩個指標,分別指向這兩個鍊錶的第乙個結點。當第乙個結點的值小於第二個結點的值時,鍊錶1的頭結點將是合併後的鍊錶的頭結點。繼續比較兩個頭結點,如果第二個結點的值小,鍊錶2的頭結點將是合併剩餘結點得到的鍊錶的頭結點。packa...