日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言实现两个有序链表的合并(代码示例)

發布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言实现两个有序链表的合并(代码示例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c語言實現兩個有序鏈表的合并:

現有兩個有序單鏈表,通過代碼實現將兩個單鏈表合并為一個有序的新表,要求使用舊表的空間,不能新分配內存

#include?#include?typedef struct List{

????int a;

????struct List *next;}list;void newList(list *l){

????//初始化頭節點

????l->next = NULL;}void setList(list * l){

????//建立鏈表

????int i = 1;

????int j;

????while (i)

????{

????????scanf_s("%d", &j);

????????if (j == -1)

????????{

????????????i = 0;

????????}

????????else

????????{

????????????list *l1 = (list *)malloc(sizeof(list));//為新的結點分派內存

????????????l1->a = j;//儲存數據

????????????/*

????????????將最后結點的next區域指向新結點

????????????將新結點的next區域指向設置為空

????????????*/

????????????l->next = l1;

????????????l1->next = NULL;

????????????l = l->next;

????????}

????}}void printfList(list *l){

????printf("該鏈表內容為:\n");

????while (l->next)

????{

????????printf("%d\t", l->next->a);

????????l = l->next;

????}

????printf("\n");}list *add(list *LA, list *LB){

????//記錄兩個鏈表的頭結點

????list *la=LA;

????list *l = LA;

????list *lb = LB;

????//移動指針

????LA = LA->next;

????LB = LB->next;

????la->next = NULL;

????while (LA!=NULL&&LB!=NULL)

????{

????????/*

????????將兩個結點的數據進行比較,數據較小的結點接在頭結點后面,

????????*/

????????if (LA->a < LB->a)

????????{

????????????la->next = LA;

????????????la = LA;

????????????LA = LA->next;

????????}

????????else

????????{

????????????la->next = LB;

????????????la = LB;

????????????LB = LB->next;

????????}

????}

????//若其中一個鏈表的結點已經全接在新表中則將另一個鏈表的剩余結點接在新表的后面

????if (LA)

????{

????????la->next = LA;

????}

????if(LB)

????{

????????la->next = LB;

????}

????free(lb);

????return l;}int main(){

????//為結點分配內存

????list *LA = (list *)malloc(sizeof(list));

????list *LB = (list *)malloc(sizeof(list));

????//初始化結點

????newList(LA);

????newList(LB);

????//建立鏈表

????setList(LA);

????setList(LB);

????//輸出鏈表的內容

????printf("LA的數據:\n");

????printfList(LA);

????printf("LB的數據:\n");

????printfList(LB);

????list *LC = add(LA, LB);

????//輸出合并后的新表

????printfList(LC);

????system("pause");

????return 0;}

聲明:

本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。


總結

以上是生活随笔為你收集整理的c语言实现两个有序链表的合并(代码示例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。