1. 程式人生 > >用頭插法合並單鏈表

用頭插法合並單鏈表

void print clu b- 合並單鏈表 truct tdi pre log

 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 }

用頭插法合並單鏈表