第20803题 单选
C++双向链表插入操作横线处应填入哪项代码

下面的C++代码用于将字符串保存到带头节点的双向链表中,对重复的字符串计数,并将最新访问的字符串节点放在链头便于查找。横线处应填入的代码是:

typedef struct Node{
    string str;
    int ref;
    struct Node *next, *prev;
}Node;
Node * Insert(Node *pHead, string s)
{
    Node *p = pHead->next;
    Node *q;
    while(p) {
        if(p->str == s) {
            p->ref++;
            p->next->prev = p->prev;
            p->prev->next = p->next;
            break;
        }
        p=p->next;
    }
    if(!p) {
        p = new Node;
        p->str = s;
        p->ref=0;
        p->next = p->prev = NULL;
    }
    /* 横线处 */
    pHead->next = p, p->prev = pHead;
    return pHead;
}
A

if(pHead) {p->next = pHead->next, pHead->next->prev = p;}

B

if(pHead->next) {p->next = pHead->next, pHead->next->prev = p;}

C

p->next = pHead->next, pHead->next->prev = p;

D

触发异常,不能对空指针进行操作。