1.单向链表按位置修改
void list_update_pos(linklist *L,int pos,datatype e)
{
if(NULL==L||list_empty(L)||pos<0||pos>L->len)
{
printf("修改失败\n");
return ;
}
linklist *p=list_find_node(L,pos);
p->data=e;
printf("修改成功\n");
}
2.单向链表的翻转 (非递归)
void list_reverse(linklist *L)
{
if(NULL==L)
{
printf("翻转失败\n");
return ;
}
linklist *p=L->next;
L->next=NULL;
linklist *s=NULL;
while(p)
{
s=p->next;
p->next=L->next;
L->next=p;
p=s;
}
printf("翻转完成\n");
}
单向链表的翻转 (递归):
linklist *reverse(linklist* L)
{
if(L==NULL||L->next==NULL)
{
return L;
}else
{
linklist *p=reverse(L->next);
L->next->next=L;
L->next=NULL;
return p;
}
}
递归代码经过多次修改测试仍然会出现段错误和乱码 w,原因尚不明确
输出结果:
3.双向链表尾插、头删、按值修改
int insert_tail(doublelink *d,datatype e)
{
if(NULL==d)
{
printf("插入失败\n");
return -1;
}
doublelink *p=apply(e);
if(empty(d))
{
d->next=p;
p->prio=d;
}else
{
doublelink *q=find(d,d->len);
q->next=p;
p->prio=q;
}
d->len++;
printf("插入成功\n");
return 0;
}
int delet_head(doublelink *d)
{
if(NULL==d||empty(d))
{
printf("删除失败\n");
return -1;
}
doublelink *p=d->next;
if(p->next==NULL)
{
p->prio->next=NULL;
free(p);
}else
{
p->prio->next=p->next;
p->next->prio=p->prio;
free(p);
}
d->len--;
p=NULL;
printf("删除成功\n");
return 0;
}
int update_value(doublelink *d,datatype old_e,datatype new_e)
{
if(NULL==d||empty(d))
{
printf("修改失败\n");
return -1;
}
doublelink *q=d->next;
while(q!=NULL)
{
if(q->data==old_e)
{
q->data=new_e;
}
q=q->next;
}
printf("修改成功\n");
return 0;
}
输出结果: