T14 遞增序列合併鍊錶

2021-10-02 14:48:24 字數 1069 閱讀 9267

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

時間限制: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 ...