作业1:完成尾删函数:int list_delete_tail(Linklist *L);
//尾删
int list_delete_tail(Linklist *L)
{
if(NULL==L || list_empty(L))
{
printf("链表为空,无法删除\n");
return -1;
}
Linklist *q = L;
Linklist *p;
while(q->next != NULL)
{
p = q;
q = q->next;
}
free(q);
p->next = NULL;
L->len--;
printf("尾删成功\n");
return 0;
}
作业2:完成按位置修改函数 : int list_update_pos(Linklist *L, int pos, datatype e);
//按位置修改
int list_update_pos(Linklist *L,int pos,datatype e)
{
//判断逻辑
if(NULL==L || list_empty(L) || pos<=0 || pos>L->len)
{
printf("位置不合法\n");
return -1;
}
//修改
Linklist *q = L->next;
for(int i=1;i<pos;i++)
{
q = q->next;
}
q->data = e;
printf("修改成功\n");
return 0;
}
作业3:完成按值修改函数: int list__update_value(Linklist *L, datatype old_e, datatype new_e);
//按值修改
int list_update_value(Linklist *L,datatype old_e,datatype new_e)
{
if(NULL==L || list_empty(L))
{
printf("表空,修改失败\n");
return -1;
}
//修改
Linklist *q = L->next;
while(q!=NULL)
{
if(q->data == old_e)
{
q->data = new_e;
printf("修改成功\n");
return 0;
}
q = q->next;
}
printf("没有找旧值,修改失败\n");
return -2;
}
作业4:完成链表反转函数:void list_reverse(Linklist *L);
//链表反转函数
void list_reverse(Linklist *L)
{
//判断逻辑
if(NULL==L || 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;
}
}
find_node函数
//按位置查找返回查找到的节点
Linklist *find_node(Linklist *L,int pos)
{
//判断逻辑
if(NULL==L || pos<0 || pos>L->len)
{
printf("查找失败\n");
return NULL;
}
//查找节点
Linklist *q = L;
for(int i=1;i<=pos;i++)
{
q = q->next;
}
return q;//找到的节点返回
}
作业5:XMind思维导图