关于链表的插入时的排序,希望朋友们指点下
这是我写的一个插入时就自动排序,我感觉有点小问题?程序代码:
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;//遍历 } }