1、双向链表按位置删除
int delete_pos(double_linklist l,int pos)
{
if(l==NULL||l->len==0)
{
printf("按位置删除失败\n");
return -1;
}
double_linklist p=l;
for(int i=0;i<pos;i++)
{
p=p->next;
}
if(p->next!=NULL)
p->next->prev=p->prev;
p->prev->next=p->next;
free(p);
p=NULL;
l->len--;
return 0;
}
2、双向链表按位置修改
int update_pos(double_linklist l,int pos,datatype e)
{
if(l==NULL||l->len==0)
{
printf("按位置插入失败\n");
return -1;
}
double_linklist p=l;
for(int i=0;i<pos;i++)
{
p=p->next;
}
p->data=e;
return 0;
}
3、双向链表按位置查找
int searh_pos(double_linklist l,int pos)
{
if(l==NULL||l->len==0)
{
printf("按位置删除失败\n");
return -1;
}
double_linklist p=l;
for(int i=0;i<pos;i++)
{
p=p->next;
}
printf("%d\n",p->data);
return 0;
}
4、双向循环链表头插
int Insert_head(loopdouble L,datatype e)
{
if(L==NULL)
return -1;
loopdouble p=L->next;
loopdouble q=create(0);
if(q==NULL)
return -1;
L->next=q;
q->prev=L;
if(L->next!=L)
{
p->prev=q;
q->next=p;
}
else if(L->next==L)
{
L->prev=q;
q->next=L;
}
q->data=e;
L->len++;
return 0;
}
5、双向循环链表头删
int delete_head(loopdouble L)
{
if(L==NULL || L->next==L)
return -1;
loopdouble p=L->next;
if(p->next!=L)
{
L->next=p->next;
p->next->prev=L;
}
else
{
L->next=L;
L->prev=L;
}
L->len--;
free(p);
p=NULL;
return 0;
}
//尾删
int delete_rear(loopdouble L)
{
if(L==NULL || L->next==L)
return -1;
loopdouble p=L->prev;
p->prev->next=L;
L->prev=p->prev;
L->len--;
free(p);
p=NULL;
}
6、双向循环链表尾删
int delete_rear(loopdouble L)
{
if(L==NULL || L->next==L)
return -1;
loopdouble p=L->prev;
p->prev->next=L;
L->prev=p->prev;
L->len--;
free(p);
p=NULL;
}