1. /*有两个线性表A和B,都是循环链表存储结构,两个链表头指针分别为head1和head2,将B链表链接到A链表的后面,合并成一个链表。*/
    2. #include<stdio.h>
    3. #include<malloc.h>
    4. typedef struct node /*定义结点的存储结构*/
    5. {
    6. int data;
    7. struct node *next;
    8. }NODE;
    9. NODE *create_circular() /*此函数采用后插入方式建立单向循环链表,并返回一个指向链表表头的指针*/
    10. {
    11. NODE *head,*q,*p; /*定义指针变量*/
    12. int a,n;
    13. head=(NODE*)malloc(sizeof(NODE)); /*申请新的存储空间,建立表头结点*/
    14. q=head;
    15. printf("\nInput number of the list: ");
    16. scanf("%d",&n); /*输入单向链表结点个数*/
    17. head->data=n; /*表头结点赋值n,即表中结点个数*/
    18. if(n>0) /*若n<=0,建立仅含表头结点的空表*/
    19. {
    20. printf("Input the list :");
    21. while(n>0)
    22. {
    23. scanf("%d",&a); /*输入新元素*/
    24. p=(NODE*)malloc(sizeof(NODE));
    25. p->data=a;
    26. q->next=p;
    27. q=p;
    28. n--;
    29. }
    30. }
    31. q->next=head;
    32. return(head); /*返回表头指针head*/
    33. }
    34. NODE *connect(NODE *head1,NODE *head2)
    35. { /*把循环链表A和B合并成一个循环链表。head1和head2分别为两个循环链表的头指针*/
    36. NODE *p,*q;
    37. p=head1->next;
    38. while(p->next!=head1) /*找head1的最后一个结点*/
    39. p=p->next;
    40. q=head2->next;
    41. while(q->next!=head2) /*找head2的最后一个结点*/
    42. q=q->next;
    43. p->next=head2->next; /*A,B两表链接*/
    44. q->next=head1;
    45. free(head2); /*释放B表表头结点*/
    46. return(head1);
    47. }
    48. main() /*主程序*/
    49. {
    50. NODE *a,*b,*c,*d;
    51. a=create_circular(); /*调用create_circular()函数,建立单向循环链表A*/
    52. b=create_circular(); /*调用create_circular()函数,建立单向循环链表B*/
    53. c=connect(a,b); /*调用connect函数,将循环链表A和B合并成一个循环链表*/
    54. d=c;
    55. printf("\nOutput the list: "); /*输出链接后的整个链表*/
    56. while(d->next!=c)
    57. {
    58. d=d->next;
    59. printf("%3d",d->data);
    60. }
    61. }