单链表的sort
排序采用冒泡法,不是单纯的改变链表结点的值,而是通过改变物理结构上的指针域指向实现。
void sort(List *list)
{
if(list->size <=1)` //基本条件
return ;
Node *p,*q,*pa,*temp;
for(int i=0;i<list->size-1;i++)//控制总次数
{
q=list->first->next; //初始换三个指针
p=q->next; //关系为pa>q>p
pa=list->first;
for(int l=0;l<list->size-1-i;l++)//控制每层循环次数
{
if(q->data>p->data)
{
if(list->last==p) //需要修改链表的last指向
list->last=q;
q->next=p->next; //物理结构的改变
p->next=q;
pa->next=p; 现在的关系为pa>p>q
temp=q; //需要改为初始啥关系pa<q<p
q=p;
p=temp;
}
p=p->next; //前进
q=q->next;
pa=pa->next;
}
}
}
单链表的resver
void resver(List *list)
{
if(list->size<=1)
return ;
Node *q=list->first->next;
Node *p=q->next;
q->next=NULL; //修改链表的last指向
list->last=q;
while(p!=NULL)
{//指针关系为 q > p > list->first->next
list->first->next=p->next;
p->next=q; //逆转
q=p; //重新赋值
p=list->first->next;
}
list->first->next=q; //添加头结点
}
时间: 2024-10-13 02:00:07