作业1在链表里用尾删函数及结果:
//1.尾删
int list_delete_tail(LinkList* L){
//逻辑判断
if(NULL==L||LinkList_list_empty(L)){
printf("链表尾删失败\n");
return -1;
}
//遍历指针指向最后一个结点,找到前一个结点
LinkList* p=L;
LinkList* q=p;
while(p->next!=NULL){
q=p;
p=p->next;
}
//尾删
q->next=NULL;
free(p);
//表的变化
L->len--;
printf("尾删成功\n");
return 0;
}
尾删结果:
作业2在链表中按位置修改:
//2.按位置修改
int list_updata_pos(LinkList* L,int pos,datatype e){
//逻辑判断
if(NULL==L||pos<0||pos>L->len){
printf("查找失败\n");
return -1;
}
//查找逻辑
LinkList* p=L;
for(int i=1;i<=pos;i++){
p=p->next;
}
p->data=e;
printf("按位置修改成功\n");
return 0;
}
结果:
作业3在链表中按值修改;
//3.按值修改
int list_updata_value(LinkList* L,datatype old_e,datatype new_e){
//逻辑判断
if(NULL==L){
printf("查找失败\n");
return -1;
}
//遍历链表修改值
LinkList* p=L;
while(p!=NULL){
if(p->data==old_e){
p->data=new_e;
}
p=p->next;
}
printf("按值修改成功\n");
return 0;
}
结果:
作业4链表的反转函数:
//4.链表反转函数
void list_reverse(LinkList *L){
//判断逻辑
if(NULL==L || LinkList_list_empty(L)){
printf("链表为空\n");
return;
}
//翻转
LinkList *p = L->next;
LinkList *q = NULL;
datatype temp;
int n = L->len;
for(int i=0;i<L->len/2;i++){
q = find_node(L,n--);
temp = q->data;
q->data = p->data;
p->data = temp;
p = p->next;
}
printf("反转成功\n");
}
结果为: