02 線性結構1 兩個有序鍊錶序列的合併

2021-10-07 22:18:40 字數 1501 閱讀 1619

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

list merge( list l1, list l2 );
其中list結構定義如下:

typedef struct node *ptrtonode;

struct node ;

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

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

#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()

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

3

1 3 5

52 4 6 8 10

1 2 3 4 5 6 8 10 

null

null

本題的基本思路是

1)不斷比較鍊錶的當前指標元素大小,將較小的那個移入合併鍊錶中

2)同時較小的那個鍊錶指標後移p=p->next,合併鍊錶指標同時後移l=l->next

值得注意的是每次操作都是會讓鍊錶從指標處開始到後面的所有部分都接到合併鍊錶中但是每乙個位置都是會被後面的操作不斷更新的,最終保證了每一位都是經過判斷的。

當l1,l2某乙個的指標已經移動到最後,迴圈退出。

最終只需要將還未遍歷完的鍊錶剩餘部分直接接到合併鍊錶即可。

l->next=p?p:q;

本題還有乙個隱藏的坑:合併鍊錶後,被合併了兩個鍊錶要置為空。

l1->next=null;l2->next=null;

list merge( list l1, list l2 )

else

l=l->next;

} l->next=p ? p : q;

l1->next=null;

l2->next=null;

return l3;

}

02 線性結構1 兩個有序鍊錶序列的合併

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

02 線性結構1 兩個有序鍊錶序列的合併

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

02 線性結構1 兩個有序鍊錶序列的合併

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