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

2021-10-05 18:14:27 字數 1107 閱讀 2070

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

示例:

輸入: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...