作业需要:
完成单链表的按值修改函数
//按值查找函数
int list_search_value(DoubleLink *L,datatype e){
//判断逻辑
if(NULL == L){
puts("查找失败");
return -1;
}
//查找逻辑
DoubleLink *q = L->next; //从第一个结点出发
for(int i=1;i<=L->len;i++){
if(q->data == e){
puts("查找成功");
return i;
}
q = q->next; //继续判断下一个结点
}
return 0; //说明没找到
puts("未找到");
}
//按位置修改函数
int list_update_pos(DoubleLink *L,int pos,datatype new_e){
//判断逻辑
if(NULL == L || pos<1 || pos>L->len){
puts("修改失败");
return 0;
}
//查找到要修改的结点
DoubleLink *p = find_node(L,pos);
//更新数据
p->data = new_e;
puts("修改成功");
return 1;
}
//按值修改函数
int list_update_value(DoubleLink *L,datatype old_value,datatype new_value){
int ret = list_search_value(L,old_value); //先找到值在链表中的位置
list_update_pos(L,ret,new_value); //根据值在链表中的位置进行修改
}
完成单向链表的翻转:
//链表翻转
void list_reverse(Linklist *L){
//判断逻辑
if(NULL == L || L->next == NULL){
puts("翻转失败");
return;
}
//翻转逻辑
Linklist *p = list_create();
while(L->next != NULL){
Linklist *q = L->next;
L->next = q->next;
q->next = p->next;
p->next = q;
}
L->next = p->next;
free(p);
p = NULL;
}
终端执行结果:
完成单链表的按值修改函数
ubuntu@ubuntu:03test$ ./a.out
创建成功
创建成功
创建成功
创建成功
创建成功
创建成功
50 40 30 20 10
查找成功
查找成功
修改成功
50 40 30 20 1000
完成单向链表的翻转:
ubuntu@ubuntu:02test$ gcc *.c
ubuntu@ubuntu:02test$ ./a.out
创建成功
此时链表元素分别是:
D C B A
创建成功
此时链表元素分别是:
A B C D