一、单链表的按位置修改
思路:参数:L pos e
1,判断链表是否存在
2,判断链表是否为空
3,判断位置是否合法
4,找到pos起名字p
5. 修改p的数据域:重新赋值
head.h
int revise_pos(linklist L,int pos,datatype e);
main.c
//按位置修改
printf("请输入需要修改的位置:");
scanf("%d",&pos);
printf("请输入需要修改的值:");
scanf("%d",&e);
revise_pos(L,pos,e);
output(L);
test.c
//按位置修改
int revise_pos(linklist L,int pos,datatype e)
{
//判断头结点是否存在,判断链表是否为空,判断位置是否合法
if(L==NULL ||L->len==0||pos<1||pos>L->len)
{
printf("修改失败!\n");
return -1;
}
//起名为p
linklist p=L;
for(int i=0;i<pos;i++)
p=p->next;
p->data=e;
return 0;
}
二、 单链表的按元素删除
head.h
int delete_data(linklist L,datatype key);
main.c
//按元素删除
printf("请输入删除的元素:");
scanf("%d",&key);
delete_data(L,key);
output(L);
test.c
int delete_data(linklist L,datatype key)
{
//1,查找key对应的位置
int pos=search_data(L,key);
if(pos==-1)
{
printf("删除元素失败\n");
return -1;
}
//2,根据位置删除
delete_pos(L,pos);
return 0;
}
三、单链表的按元素修改
思路:参数头结点L 被修改的元素key 要修改的元素e
1.根据key得到位置
2,根据位置修改
head.h
int revise_data(linklist L,datatype key,datatype e);
main.c
//按元素修改
printf("请输入需要修改的元素:");
scanf("%d",&key);
printf("请输入修改的元素:");
scanf("%d",&e);
revise_data(L,key,e);
output(L);
test.c
int revise_data(linklist L,datatype key,datatype e)
{
if(L==NULL || L->len==0)
return -1;
int flag=search_data(L,key);
if(flag==-1)
return -1;
int abs=revise_pos(L,flag,e);
if(abs==-1)
return -1;
return 0;
}
四、单链表的空间释放
循环删除头结点后面的所有结点
for(i=0;i
{
delete_head(L);
}
删除头
free(L)
L=NULL;
head.h
void free_space(linklist L);
main.c
//空间释放
free_space(L);
test.c
//链表空间释放
void free_space(linklist L)
{
while(L->next)
delete_head(L);
free(L);
L=NULL;
}