題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。
示例:
輸入:1->2->4, 1->3->4限制:輸出:1->1->2->3->4->4
0 <= 鍊錶長度 <= 1000
鍊錶結構:
struct listnode };
因為需要生成乙個全新的鍊錶,那麼我們就重新建立乙個鍊錶來儲存遞增排序鍊錶,然後每次將兩個鍊錶中較小的數值連線到新鍊錶後面即可,但我們需要注意幾個點:
listnode*
mergetwolists
(listnode* l1, listnode* l2)
if(l2==
null
) listnode* head=
newlistnode(0
);//申請頭節點
listnode* res=head;
//指向頭節點的指標
while
(l1!=
null
&& l2!=
null
)//迴圈條件
else}if
(l1==
null)if
(l2==
null
)return head-
>next;
//不需要頭節點
}
迴圈都是可以寫為遞迴的,我們從上面的**分析出來遞迴條件,遞迴內容等:
listnode*
mergetwolists
(listnode* l1, listnode* l2)
if(l2==
null
) listnode* head=
null;if
(l1-
>val > l2-
>val)
else
return head;
}
加油哦!?。 面試題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...