#include <stdio.h>
#include <stdlib.h>
#include"looplink.h"
//判空
int list_empty(LoopLink L)
{
return L->next==L;
}
//创建
LoopLink list_create()
{
LoopLink L = (LoopLink)malloc(sizeof(Node));
if(NULL==L)
{
printf("创建失败\n");
return NULL;
}
L->len = 0;
L->next =L;
printf("创建成功\n");
return L;
}
//头插
int list_insert_head(LoopLink L,datatype e)
{
if(NULL == L)
{
printf("所给链表不合法\n");
return -1;
}
LoopLink p = (LoopLink)malloc(sizeof(Node));
if(NULL==p)
{
printf("节点申请失败\n");
return -2;
}
p->data = e;
p->next = NULL;
p->next = L->next;
L->next = p;
L->len++;
printf("插入成功\n");
return 0;
}
//遍历
void list_show(LoopLink L)
{
if(NULL==L || list_empty(L))
{
printf ("遍历失败\n");
return ;
}
LoopLink q = L->next;
while(q != L)
{
printf("%d\t",q->data);
q=q->next;
}
printf("\n");
}
//删除并输出
void list_delete_show(LoopLink L, LoopLink p)
{
if(NULL==L || list_empty(L))
{
printf("删出失败");
return ;
}
LoopLink q=p->next;
printf("%d\t",q->data);
p->next=q->next;
free(q);
p=NULL;
}
//选择
LoopLink list_joseph(LoopLink L,LoopLink p, int n)
{
int i;
for(i=1;i<n;i++)
{
p=p->next;
if(p==L)
p=p->next;
}
if(p->next==L)
return L;
return p;
}