link.c
#include "link.h"
//创建头结点
linklist *loop_create()
{
linklist *L=(linklist *)malloc(sizeof(linklist));
if(L==NULL)
{
printf("申请空间失败\n");
return NULL;
}
L->len=0;
L->next=L;
return L;
}
//申请结点
linklist *node_create(int in_data)
{
linklist *p=(linklist *)malloc(sizeof(linklist));
if(p==NULL)
{
printf("申请空间失败\n");
return NULL;
}
p->data=in_data;
return p;
}
//头插
int insert_head(linklist *L,int in_data)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p = node_create(in_data);
if(p==NULL)
{
return -2;
}
p->next=L->next;
L->next=p;
L->len++;
return 0;
}
//尾插
int insert_tail(linklist *L,int in_data)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p = node_create(in_data);
if(p==NULL)
{
return -2;
}
linklist *p1=L->next;
while(p1->next!=L)
{
p1=p1->next;
}
p->next=p1->next;
p1->next=p;
L->len++;
return 0;
}
//遍历
int print_loop(linklist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p=L->next;
while(p!=L)
{
printf("%d\t",p->data);
p=p->next;
}
putchar(10);
return 0;
}
//头删
int del_head(linklist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p=L->next;
L->next=p->next;
free(p);
p=NULL;
}
//尾删
int del_tail(linklist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p=L->next;
while(p->next->next!=L)
{
p=p->next;
}
linklist *del=p->next;
p->next=del->next;
free(del);
del=NULL;
return 0;
}
//删除头结点
linklist *delhead(linklist *L)
{
if(L==NULL)
{
printf("入参为空\n");
return NULL;
}
linklist *tail=L->next;
while(tail->next!=L)
{
tail=tail->next;
}
tail->next=L->next;
free(L);
L=NULL;
return tail->next;
}
//删除头结点后的遍历
int printloop(linklist *S)
{
if(S==NULL)
{
printf("入参为空\n");
return -1;
}
linklist *p=S;
do
{
printf("%d\t",p->data);
p=p->next;
}while(p!=S);
puts("");
return 0;
}
link.h
#ifndef __LINK_H__
#define __LINK_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct link
{
union
{
int len;
int data;
};
struct link *next;
}linklist;
//创建头结点
linklist *loop_create();
//申请结点
linklist *node_create(int in_data);
//头插
int insert_head(linklist *L,int in_data);
//尾插
int insert_tail(linklist *L,int in_data);
//遍历
int print_loop(linklist *L);
//头删
int del_head(linklist *L);
//尾删
int del_tail(linklist *L);
//删除头结点
linklist *delhead(linklist *L);
//删除头结点后的遍历
int printloop(linklist *S);
#endif
main.c
#include <stdio.h>
#include "link.h"
int main(int argc, const char *argv[])
{
linklist *L=loop_create();
insert_head(L,10);
insert_head(L,30);
insert_head(L,40);
insert_tail(L,70);
insert_tail(L,90);
//print_loop(L);
linklist *S=delhead(L);
printloop(S);
return 0;
}