按值修改
按值进行修改(作业)
int list_change_value(LinklistPtr L,datatype e,datatype r)
{
if(NULL==L||list_empty(L))
{
printf("修改失败\n");
return 0;
}
LinklistPtr q=L;
int count=list_search_num(L,e);
if(count==0)
{
return 0;
}
while(count>0)
{
q=q->next;
count--;
}
q->data=r;
printf("修改成功\n");
return 1;
}
按位置进行修改
int list_change_pos(LinklistPtr L,int pos,datatype e)
{
if(NULL==L||list_empty(L)||pos<1||pos>L->len)
{
printf("修改失败\n");
return 0;
}
LinklistPtr q=list_search_pos(L,pos);
q->data=e;
printf("修改成功\n");
return 1;
}
链表的排序
int list_sort(LinklistPtr L)
{
if(NULL==L||list_empty(L))
{
printf("排序失败\n");
return 0;
}
for(int i=1;i<L->len;i++)
{
for(int j=1;j<L->len-i+1;j++)
{
if((list_search_pos(L,j))->data > (list_search_pos(L,j+1))->data)
{
datatype temp =(list_search_pos(L,j))->data;
(list_search_pos(L,j))->data=(list_search_pos(L,j+1))->data;
(list_search_pos(L,j+1))->data=temp;
}
}
}
return 1;
}
单链表(递归)逆置
LinkListPtr list_reverse(LinkListPtr L)
{
//递归出口,找到最后一个节点
if(L->next == NULL)
{
return L;//返回最后一个节点的地址
}
//递归调用,将尾节点作为新的头节点保存
LinkListPtr NL = list_reverse(L->next);
//指向逆转,原来的后继节点,指针域指向前驱节点,通过遍历链表时L保存的前驱地址
L->next->next = L;
//把新指向的尾节点指针域置NULL
L->next = NULL;
return NL;
}