PTA 兩個有序鍊錶序列的合併

2021-10-05 02:29:31 字數 1367 閱讀 9536

本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。

函式介面定義:

list merge( list l1, list l2 );

其中list結構定義如下:

typedef struct node ptrtonode;

struct node ;

typedef ptrtonode list; / 定義單鏈表型別 */

l1和l2是給定的帶頭結點的單鏈表,其結點儲存的資料是遞增有序的;函式merge要將l1和l2合併為乙個非遞減的整數序列。應直接使用原序列中的結點,返回歸併後的帶頭結點的煉表頭指標。

裁判測試程式樣例:

#include

#include

typedef int elementtype;

typedef struct node *ptrtonode;

struct node ;

typedef ptrtonode list;

list read(); /* 細節在此不表 /

void print( list l ); / 細節在此不表;空煉表將輸出null */

list merge( list l1, list l2 );

int main()

/* 你的**將被嵌在這裡 */

輸入樣例:

31 3 5

52 4 6 8 10

輸出樣例:

1 2 3 4 5 6 8 10

null

null

思路一(易於理解):建立乙個陣列,遍歷l1,l2,並且把其中的data存入陣列,然後對陣列排序,之後利用陣列建立乙個新的鍊錶。

思路二:因為已有結點也是公升序排列,故可以利用已有結點。

思路二解法:

list merge

( list l1, list l2 )

else

}//兩個鍊錶可能在乙個鍊錶遍歷完後,另乙個鍊錶有剩餘

//我們剩餘的鍊錶直接鏈結到我們新鍊錶就可以(因為已有鍊錶都是公升序排列)

p->next =

(a ==

null

)? b : a;

/* if (a == null)

p->next = b;

else

p->next = a;

*///為什麼不是l1 = null?

//因為我們帶空頭結點

l1->next =

null

; l2->next =

null

;return head;

}

浙大PTA兩個有序鍊錶序列的合併

思路 用乙個指標p1指向第乙個鍊錶,用乙個指標p2指向第二個鍊錶,比較倆個指標指向節點的值,哪個小把那個放進去,指標後移一位,當某個指標指向的鍊錶為空,則另乙個鍊錶剩餘部分直接連上即可 include using namespace std typedef struct lnode list str...

pta兩個有序鍊錶的合併 21 合併兩個有序鍊錶

分別遍歷兩個鍊錶,把數放到列表中,運用sort方法。再用尾插法,遍歷列表,建立新的有序鍊錶。class solution def mergetwolists self,l1 listnode,l2 listnode listnode sum def list2num node while node ...

合併兩個有序鍊錶序列

本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型...