r->next = q;q->next = r->next;//q->next = q;丢失了r->next;
我感觉C是不是写错了。它把r的地址赋值给p结点的next成员,然后又把p的地址赋值给r结点的next成员。相当于没做估计C最后那本意是q。