2.9 双向链表的按位置删除
int delete_pos(doublelink l,int pos)
{
if(l == NULL || l->next == NULL || pos < 1 || pos > l->len+1)
{
printf("error\n");
return -1;
}
int i;
doublelink p = l;
for(i = 0;i<pos-1;i++)
{
p = p->next;
}
doublelink s = p->next;
p->next = s->next;
if(s->next != NULL)
{
s->next->prev = p;
}
free(s);
s = NULL;
l->len--;
return 0;
}
2.10 双向链表的按位置修改
int change_pos(doublelink l,int pos,datatype key)
{
if(l == NULL || l->next == NULL || pos < 1 || pos > l->len+1)
{
printf("error\n");
return -1;
}
int i;
doublelink p = l;
for(i = 0;i<pos;i++)
{
p = p->next;
}
p->data = key;
return 0;
}
2.11 双向链表的按位置查找
void find_pos(doublelink l,int pos)
{
if(l == NULL || l->next == NULL || pos < 1 || pos > l->len+1)
{
printf("error\n");
return ;
}
int i;
doublelink p = l;
for(i = 0;i<pos;i++)
{
p = p->next;
}
printf("%c\n",p->data);
}
3.2 双向循环链表头插
int insert_head(loopDublelike l,datatype e)
{
if(l == NULL)
{
printf("error\n");
return -1;
}
loopDublelike p = l;
loopDublelike s = create(0);
if(s == NULL)
{
printf("error\n");
return -1;
}
s->data = e;
s->next = p->next;
s->prev = l;
p->next->prev = s;
p->next = s;
l->len++;
}
3.4 双向循环链表头删
int delete_head(loopDublelike l)
{
if(l == NULL || l->next == l)
{
printf("error\n");
return -1;
}
loopDublelike p = l->next;
l->next = p->next;
p->next->prev = l;
l->len--;
return 0;
}
3.5 双向循环链表尾删
int delete_rear(loopDublelike l)
{
if(l == NULL || l->next == NULL)
{
printf("error\n");
return -1;
}
loopDublelike p = l->prev;
p->prev->next = l;
p->next->prev = p->prev;
free(p);
p = NULL;
l->len--;
return 0;
}