所谓循环链表就是尾结点与头结点相连的链表,整个链表形成一个环。而对于循环链表的插入与删除运算,基本上与单链表相同,只是在判断链表是否结束有所不同。下面的代码操作实现了两个循环单链表的合并。且核心代码不多,主要是分别找到循环单链表的尾结点再进行后续操作。
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
char data;
struct list *next;
}linklist;
linklist *CreateLinklist_End(int *l); //尾插法创建单循环链表
linklist *Linklist_Connect(linklist *h1,int l1, linklist *h2, int l2); //单循环链表的合并
void ShowLinklist(linklist *h); //输出显示链表
int main(void)
{
linklist *head1, *head2;
int length1, length2; //分别记录两个循环链表的长度
printf("循环单链表的操作练习:\n");
printf("创建两个单循环链表:\n");
printf("第一个链表数据输入(请依次输入字符数据,'#'号结束):\n");
head1 = CreateLinklist_End(&length1);
getchar(); //消除回车键为后面输入带来的影响
printf("第二个链表数据输入(请依次输入字符数据,‘#’号结束):\n");
head2 = CreateLinklist_End(&length2);
printf("第一个链表的数据依次为:\n");
ShowLinklist(head1);
printf("其节点数目为:%d\n", length1);