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语言实现两个有序链表的合并(代码示例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果电脑锁键盘快捷键(苹果锁定键盘快捷键
- 下一篇: using用法是什么?