单项选择题

有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中的三个连续结点。

struct node
int data;
struct node *next;
*p,*q,*r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是()。

A. r->next=q;q->next=r->next;p->next=r;
B. q->next=r->next;p->next=r;r->next=q;
C. p->next=r;q->next=r->next;r->next=p;
D. q->next=r->next;r->next=q;p->next=r;