用头插法合并单链表

Posted zcb_bai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用头插法合并单链表相关的知识,希望对你有一定的参考价值。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct Node
 4 {
 5     int a;
 6     struct Node *next;
 7 }Node,*list;
 8 void j(list L);//头插法
 9 list hb(list LA,list LB); //合并单链表
10 int main()
11 {
12     list A,B,C;
13     A=(list)malloc(sizeof(Node));
14     B=(list)malloc(sizeof(Node));
15 
16     A->next=NULL;
17     B->next=NULL;
18 
19     printf("输入链表A:");
20     j(A);
21 
22     printf("输入链表B:");
23     j(B);
24     printf("合并后:");
25        C=(list)malloc(sizeof(Node));
26     C->next=NULL;
27     C=hb(A,B);
28     C=C->next;
29     while(C!=NULL)
30     {
31 
32         printf("%d ",C->a);
33         C=C->next;
34 
35     }
36     printf("\n");
37     return 0;
38 }
39 void j(list L)//头插法
40 {
41     list s;
42     int c;
43     int f=1;
44     while(f)
45     {
46         scanf("%d",&c);
47         if(c!=0)
48         {
49             s=(list)malloc(sizeof(Node));
50             s->a=c;
51             s->next=L->next;
52             L->next=s;
53         }
54         else
55             f=0;
56     }
57 }
58 
59 list hb(list A,list B)//合并两个链表
60 {
61     Node *q,*b,*r;
62     list C;
63     q=A->next;
64     b=B->next;
65     C=A;
66     C->next=NULL;
67     r=C;
68     while(q!=NULL&&b!=NULL)
69     {
70         if(q->a>=b->a)
71         {
72             r->next=q;
73             r=q;
74             q=q->next;
75         }
76         else
77         {
78             r->next=b;
79             r=b;
80             b=b->next;
81         }
82     }
83     if(q)
84         r->next=q;
85     else
86         r->next=b;
87     free(B);
88     return C;
89 }

 

以上是关于用头插法合并单链表的主要内容,如果未能解决你的问题,请参考以下文章

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

链表习题-将两个递增单链表合并成一个递减单链表

单链表的头插法与尾插法代码实现及详解

博客第二天——头插法建立单链表

王道数据结构 单链表 头插法

单链表建立——头插法和尾插法