輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。
時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32m,其他語言64m
本題思路不難,就是相對來說稍微複雜一點。
我最開始想的是,合併的時候,直接把phead2向phead1上合併,以此來節省再次開闢新鍊錶的記憶體空間。具體思路是:先找到phead1和phead2的較小者,假設為phead1,然後迴圈遍歷phead2,將phead2的各個節點插入到phead1中的合適位置。
但是會存在一些問題:
初始時,並不能確定phead1和phead2的大小關係,需要分情況討論。
上述的想法中對phead2的每個節點,都需要遍歷phead1來找合適位置,本身來說比較麻煩,而且演算法在最壞情況下的時間複雜度n∗(
n−1)
n*(n-1)
n∗(n−1
),太高。
所以,我還是用最原始的方法,合併到乙個新鍊錶。
/*
struct listnode
};*/
class
solution
if(phead2==
null
)
listnode* phead;
//合併鍊錶的頭指標
listnode* p;
//合併鍊錶過程中的中間指標
//初始化合併鍊錶的頭指標
if(phead1-
>val<=phead2-
>val)
else
//合併
p=phead;
while
(phead1!=
null
&&phead2!=
null
)else
}//某乙個鍊錶合併完後,直接將另乙個鍊錶的剩餘部分,鏈結到合併鍊錶的鏈尾
if(phead1 ==
null)if
(phead2 ==
null
)return phead;}}
;
合併兩遞增鍊錶
一 迴圈實現 include using namespace std struct listnode class solution if phead2 null 判斷合併煉表頭節點是從哪個節點開始 if phead1 val phead2 val else listnode prehead null...
6 2 兩個有序鍊錶序列的合併 (14 分)
本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。函式介面定義 list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list...
遞增的整數序列鍊錶的插入
遞增的整數序列鍊錶的插入 本題要求實現乙個函式,在遞增的整數序列鍊錶 帶頭結點 中插入乙個新整數,並保持該序列的有序性。函式介面定義 list insert list l,elementtype x 其中list結構定義如下 typedef struct node ptrtonode struct ...