1思维
2、循环列表
//头删
void del_head(link_p H)
{
if(H==NULL)
{
printf("入参为空\n");
return;
}
if(H->next==NULL)
{
printf("链表为空,无需删除\n");
return;
}
link_p del=H->next;
H->next=del->next;
del->next->ptr=H;
free(del);
H->len--;
return;
}
//尾删
void del_tail(link_p H)
{
if(H==NULL)
{
printf("入参为空\n");
return;
}
if(H->next==NULL)
{
printf("链表为空无需删除\n");
return;
}
link_p p=H;
while(p->next->next!=NULL)
{
p=p->next;
}
link_p del=p->next;
free(del);
p->next=NULL;
H->len--;
return;
}
//尾插
void insert_tail(link_p H,datatype data)
{
if(H==NULL)
{
printf("入参为空\n");
return;
}
link_p new =create_link(data);
link_p p=H;
while(p->next!=0)
{
p=p->next;
}
p->next=new;
new->ptr=p;
H->len++;
return;
}
//按位置插入
void insert_pos(link_p H,datatype data,int pos)
{
if(H==NULL)
{
printf("入参为空\n");
return;
}
if(pos<=0||pos>H->len-1)
{
printf("位置不合理\n");
return;
}
link_p p=H;
for(int i=0;i<pos;i++)
{
p=p->next;
}
link_p new=create_link(data);
new->next=p->next;
p->next->ptr=new;
new->ptr=p;
p->next=new;
H->len++;
return;
}
//按位置删除
void del_pos(link_p H,int pos)
{
if(H==NULL)
{
printf("入参为空\n");
return;
}
if(pos<=0||pos>H->len-1)
{
printf("位置不合理\n");
return;
}
link_p p=H;
for(int i=0;i<pos-1;i++)
{
p=p->next;
}
link_p del=p->next;
p->next=del->next;
del->next->ptr=p;
free(del);
H->len--;
return;
}