1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| #include <stdio.h> #include <stdlib.h> #include <stdbool.h>
typedef struct Inode{ int data; struct Inode *next; }Inode, *lklist;
//不带头结点 bool InitNullList(lklist &L){ L=NULL; //空表,暂时还没有任何结点。防止脏数据。 return true; }
void LinkListAdd(lklist &L,int e){ Inode *p=L; //指针p指向当前扫描到的结点 Inode *s = (Inode *)malloc(sizeof(Inode)); s->data = e; s->next = NULL; if(p==NULL){ L = s; return; } while(p->next!=NULL){ //循环找到末尾结点 p=p->next; } p->next=s; }
//打印输出单链表 //---------------start------------------- void LinkListPrint(lklist L){ Inode *p=L; //指针p指向当前扫描到的结点 if(L==NULL){ printf("NULL\n"); return; } // while无法输出最后一个结点的值 while(p->next!=NULL){ printf("%d\t",p->data); p=p->next; } // 此处补充输出最后一个结点的值 if(p->next==NULL){ printf("%d\n",p->data); } }
void mergelklist(lklist &la,lklist &lb,lklist &lc){ while(la!=NULL&&lb!=NULL){ if(la->data < lb->data){ LinkListAdd(lc, la->data); la = la->next; }else{ LinkListAdd(lc, lb->data); lb = lb->next; } } while(la!=NULL){ LinkListAdd(lc, la->data); la = la->next; } while(lb!=NULL){ LinkListAdd(lc, lb->data); lb = lb->next; } }
main(){ lklist la,lb,lc; InitNullList(la); LinkListAdd(la,1); LinkListAdd(la,3); LinkListAdd(la,4); LinkListAdd(la,6); printf("-----输出la------\n\n"); LinkListPrint(la); InitNullList(lb); LinkListAdd(lb,2); LinkListAdd(lb,5); LinkListAdd(lb,7); LinkListAdd(lb,8); LinkListAdd(lb,9); printf("-----输出lb------\n\n"); LinkListPrint(lb); InitNullList(lc); mergelklist(la,lb,lc); printf("-----输出合并后的lc------\n"); LinkListPrint(lc); }
|