创建单向循环链表
cs
linklist create_h(){
linklist p=(linklist)malloc(sizeof(struct Node));
if(p==NULL)return NULL;
p->len=0;
p->next=p;//开始就让头节点指向自身
return p;
}
创建节点
cs
linklist create(){
linklist p=(linklist)malloc(sizeof(struct Node));
if(p==NULL)return NULL;
p->data=0;
p->next=NULL;
return p;
}
头插
cs
int insert_head(linklist p,datatype data){
if(p==NULL)return -1;
linklist q=create();
if(q==NULL)return -1;
q->next=p->next;//若是第一个元素,则q指向头节点完成循环
p->next=q;
q->data=data;
p->len++;
return 0;
}
按位置插入
cs
int insert_index(linklist p,int index,datatype key){
if(p==NULL||index>p->len+1||index<1){
return -1;
}
linklist q=p;
for(int i=0;i<p->len-1;i++){
q=q->next;
}
linklist k=create();
if(k==NULL)return -1;
k->data=key;
k->next=q->next;
q->next=k;
p->len++;
return 0;
}
尾删
cs
int dele_rear(linklist p){
if(p==NULL||p->len==0)return -1;
linklist q=p;
for(int i=0;i<p->len-1;i++)
q=q->next;
q->next=mfree(q->next);
q->next=p;
p->len--;
return 0;
}
输出
cs
int output(linklist p){
puts("");
if(p==NULL||p->len==0)return -1;
linklist q=p;
for(int i=0;i<p->len;i++){
q=q->next;
printf("%d\t",q->data);
}
putchar(10);
return 0;
}
按位置删
cs
int dele_index(linklist p,int index){
if(p==NULL||index>p->len||index<1)return -1;
linklist q=p;
for(int i=0;i<index-1;i++){
q=q->next;
}
linklist k=q->next;
q->next=k->next;
k=mfree(k);
p->len--;
return 0;
}