題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。方法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...