单向链表
1、按位置进行修改
//按位置进行修改
int list_updata_pos(LinkListPtr L, int pos, datatype e)
{
//判断逻辑
if(NULL==L || list_empty(L) || pos<0 || pos>L->len)
{
printf("修改失败\n");
return 0;
}
//说明可以进行修改
//定义遍历指针从头结点开始
LinkListPtr q = L;
for(int i=0; i<pos; i++)
{
q = q->next;
}
q->data = e;
printf("修改成功\n");
return 1;
}
2、按值进行修改
//按值进行修改
int list_updata_value(LinkListPtr L, datatype old_e, datatype new_e)
{
//判断逻辑
if(NULL==L || list_empty(L) || old_e == new_e)
{
printf("修改失败\n");
return 0;
}
//可以进行修改
//调用按值查找返回结点位置函数
int index = list_search_value(L, old_e);
//调用按位置进行修改函数
list_updata_pos(L, index, new_e);
printf("修改成功\n");
return 1;
}
3、链表的排序
//链表的排序
void list_sort(LinkListPtr L)
{
//判断逻辑
if(NULL==L || list_empty(L))
{
printf("排序失败\n");
return ;
}
//
LinkListPtr p = L->next;
for(int i=0; i<L->len; i++)
{
p = L->next;
int temp;
for(int j =0; j<L->len-1; j++)
{
if(p->data > p->next->data)
{
temp = p->next->data;
p->next->data = p->data;
p->data = temp;
}
p = p->next;
}
}
printf("排序成功\n");
}
4、递归实现链表的反转
/递归实现链表的反转
LinkListPtr list_reverse_d(LinkListPtr L)
{
//递归终止条件
if(NULL==L || L->next==NULL)
{
printf("反转完成\n");
return L;
}
//递归调用,返回next
LinkListPtr p = list_reverse_d(L->next);
L->next->next = L;
L->next = NULL;
return p;
}
思维导图