想用冒泡排序对链表数据进行排序,为什么在执行了一次p=p->next之后,p=NULL,这是哪里出现了问题
struct cell * sort(struct cell* head) {//递增排序链表,head是单链表首结点指针
struct cell* p, * p0, * r, * r0, * q;
p = p0 = r = r0 = q = NULL;
p = head;
int i=0;
while(p!=NULL)
{
while(r!=NULL||i==0)
{
if(i==0)//头结点交换的情况
{r0=p;
r=r0->next;
i++;
if(r0->x>r->x)
{
r0->next=r->next;
r->next=r0;
struct cell *temp;
temp=r0;
r0=r;
r=temp;
q=r0;
r=r->next;
r0=r0->next;
}else
{q=r0;
r0=r;
r=r->next;
}
}else
{
if(r0->x>r->x)//其他情况
{
struct cell *temp1;
temp1=r->next;
q->next=r;
r->next=r0;
r0->next=temp1;
struct cell *temp2;
temp2=r0;
r0=r;
r=temp2;
q=q->next;r0=q->next;r=r0->next;
}
else{
q=q->next;r0=q->next;r=r0->next;
}
}
}
p=p->next;
i++;
}
return head;
}