为了高效性,我选择了换节点的方式来实现链表的排序的核心部分。
这是具体的思路,非常抱歉,图是随便弄的。
ort(struct node *head)//链表排序,冒泡排序
{
struct node *p, *q,*x,*temp=NULL,*prep,*tail,*subHead,*b,*v=NULL,*t;//定义指针
prep = head;//指针指向开头
b = head;
p = prep;
q = prep->next;
for(int i=0;i<4;i++)//有几个数据就-1;比如x 个i<x-1
{
while(q!=NULL)
{
if(p->name>q->name)
{
if (p ==b)//处理开头的问题
{
p->next = q->next;//从后往前连接
q->next = p;
head = q;
prep = head;
p = head;
b= head;
q = head->next;
}
else if (p != b)//处理中间过程
{
p->next = q->next;
q->next = p;
head->next = q;
head = head->next;
p = head;
q = head->next;
}
}
p = p->next;//地址移动
q = q->next;
}
head = prep;
p = prep;
q = prep->next;
}
head = prep;
return head;
}
如有更好的方法还请指教,谢谢。