1.双向链表头删
//6.头删
int delete_head(double_link_p H){
if(NULL==H || 0==H->len){
printf("删除失败\n");
return -1;
}
double_link_p p=H->next;
H->next=p->next;
if(p->next!=NULL){
p->next->pri=H;
}
H->len--;
return 0;
}
2.双向链表尾插
//4.尾插
int insert_tail(double_link_p H,datatype data){
if(NULL==H){
printf("入参为空\n");
return -1;
}
double_link_p new=create_node();
if(NULL==new){
printf("创建失败\n");
return -1;
}
double_link_p p=H;
while(p->next!=NULL){
p=p->next;
}
new->data=data;
p->next=new;
new->pri=p;
H->len++;
return 0;
}
3.双向链表按位置插入
//9.按位置插入
int insert_pos(double_link_p H,int pos,datatype data){
if(NULL==H){
printf("入参为空\n");
return -1;
}
if(pos<1 || pos>H->len+1){
printf("插入位置不合理\n");
return -1;
}
double_link_p ins=create_node();
if(NULL==ins){
printf("创建失败\n");
return -1;
}
ins->data=data;
double_link_p p=H;
for(int i=0;i<pos-1;i++){
p=p->next;
}
ins->next=p->next;
ins->pri=p;
if(p->next!=NULL){
p->next->pri=ins;
}
p->next=ins;
H->len++;
return 0;
}
4.双向链表按位置删除
//8.按位置删除
int delete_pos(double_link_p H,int pos){
if(NULL==H || 0==H->len){
printf("删除失败\n");
return -1;
}
if(pos<1 || pos>H->len){
printf("输出位置不合理\n");
return -1;
}
double_link_p p=H;
for(int i=0;i<pos;i++){
p=p->next;
}
p->pri->next=p->next;
if(p->next!=NULL){
p->next->pri=p->pri;
}
free(p);
p=NULL;
H->len--;
return 0;
}