链表排序的程序 但是会丢失头结点 能否讲解一下

void sort(Linknode *&L)
{
Linknode *p,*q,*pre;
p=L->next->next ;
L->next->next = NULL;

while(p!=NULL)
{
    q=p->next ;
    pre=L;
while(pre->next!=NULL && L->next->data<p->data)  
    pre=pre->next ;
    p->next =pre->next ;
    pre->next =p;
    p=q;
}

}

https://blog.csdn.net/Jeff_Winger/article/details/78303386