- /*有两个线性表A和B,都是循环链表存储结构,两个链表头指针分别为head1和head2,将B链表链接到A链表的后面,合并成一个链表。*/ 
- #include<stdio.h>
- #include<malloc.h>
- typedef struct node                    /*定义结点的存储结构*/
- {
-     int data;
-     struct node *next;
- }NODE;
- NODE *create_circular()                 /*此函数采用后插入方式建立单向循环链表,并返回一个指向链表表头的指针*/
- {
-     NODE *head,*q,*p;                 /*定义指针变量*/
-     int a,n;
-     head=(NODE*)malloc(sizeof(NODE));  /*申请新的存储空间,建立表头结点*/
-     q=head;
-     printf("\nInput number of the list: ");
-     scanf("%d",&n);                          /*输入单向链表结点个数*/
-     head->data=n;                            /*表头结点赋值n,即表中结点个数*/
-     if(n>0)                                  /*若n<=0,建立仅含表头结点的空表*/
-     {
-           printf("Input the list :");
-         while(n>0)
-         {
-               scanf("%d",&a);                  /*输入新元素*/
-             p=(NODE*)malloc(sizeof(NODE));
-             p->data=a;
-             q->next=p;
-             q=p;
-             n--;
-         }
-     }
-     q->next=head;
-     return(head);                           /*返回表头指针head*/
- }
- NODE *connect(NODE *head1,NODE *head2)
- { /*把循环链表A和B合并成一个循环链表。head1和head2分别为两个循环链表的头指针*/
-     NODE *p,*q;
-     p=head1->next;
-     while(p->next!=head1)                   /*找head1的最后一个结点*/
-         p=p->next; 
-     q=head2->next;
-     while(q->next!=head2)                   /*找head2的最后一个结点*/
-         q=q->next;
-     p->next=head2->next;                    /*A,B两表链接*/
-     q->next=head1;
-     free(head2);                            /*释放B表表头结点*/ 
-     return(head1);
- }
- main()                       /*主程序*/
- {
-     NODE *a,*b,*c,*d;
-     a=create_circular();        /*调用create_circular()函数,建立单向循环链表A*/
-     b=create_circular();        /*调用create_circular()函数,建立单向循环链表B*/
-     c=connect(a,b);           /*调用connect函数,将循环链表A和B合并成一个循环链表*/
-     d=c; 
-     printf("\nOutput the list: ");  /*输出链接后的整个链表*/  
-     while(d->next!=c) 
-     {
-         d=d->next;
-         printf("%3d",d->data);
-     }
- }