关于链表的插入时的排序,希望朋友们指点下
这是我写的一个插入时就自动排序,我感觉有点小问题?
程序代码:Hero *Linked(Hero *p)
{
S *head,*p1,*p2;
cout<<"请输入添加信息:";
p1=(Hero *)malloc(LEN);
cout<<"Name:";
cin>>p1->name;
cout<<"Number:";
cin>>p1->num;
int i=0;
if (p==NULL)//如果传入的链表中地址中没有指向
{
head=p1;//把新建的链表地址给头指针
head->next=NULL;//头指针的节点指向空
return head;//返回头结点
}
while (p!=NULL)//遍历链表
{
if (p1->num>p->num)//排序,降序
{
if (i==0)//如果插入的链表的num值是最大的
{
head=p1;//头指针指向p1
p1->next=p;//节点指向原头指针
return head;//返回头指针
}
p2->next=p1;//插入的是中间,那么用p2表示遍历的前一个指针指向p1
p1->next=p;//然后p1指向正在遍历的链表
return head;//返回头指针
}
if (p->next==NULL)//如果是尾指针
{
p->next=p1;//遍历的p指向新建链表p1
p1->next=NULL;//然后p1指向尾结点
return head;//返回头指针
}
i++;//用来判断是否插入到头指针
p2=p;//遍历前一个地址
p=p->next;//遍历
}
}





