一、双向链表的按位置删除
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;
}
二、双向链表的按位置修改
/*
* function: 按位置修改
* @param [ in] 头结点 位置 值
* @param [out]
* @return 成功返回0,失败返回-1
*/
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;
}
三、双向链表的按位置查找
/*
* function: 按位置查找
* @param [ in] 头结点 位置
* @param [out] 成功返回位置
* @return
*/
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;
}
四、双向循环链表头插
//头插
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;
}
五、双向循环链表头删
//头删
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;
}
六、双向循环链表尾删
//尾删
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;
}