这里,我们来实现循环链表的基本操作,我们采用单链表转换为循环链表:
1.将单链表转换为循环链表
ChangeLinkListToCkList(LinkList head) //这里只需要将最后的尾指针指向头结点
{
LinkList p,p2=head,p1=head;
while(p2){ //最后这个p就是链表指向尾结点的指针
p=p2;
p2=p2->next;
}
while(p!=head) //最后这个head就是指向倒数第二个尾结点的指针
{
head=head->next;
}
head->next=p1; //将尾结点指向头结点
}
2.向循环链表添加数据
void AddElemIntoCKList(LinkList head,int index,User user)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
p->user=user;
int i=0;
for(;i<index-1;i++) //这里返回的是目标位置的前一个结点
{
head=head->next;
}
p->next=head->next; //将目标结点指向当前目标位置上的结点
head->next=p; //将目标位置的前一个结点指向目标结点,至此目标结点完成插入操作
}
3.删除循环链表的某个位置的结点
void DeletElemFromCKList(LinkList head,int index)
{
int i=0;
for(;i<index-1;i++) //这里返回的是目标位置的前一个结点
{
head=head->next;
}
LinkList p=head->next;
head->next=head->next->next;
free(p);
}
4.将两个循环链表合并成一个循环链表
void ContactCKList(LinkList tails_0,LinkList tails_1) //这