#3348. [GESP202312 五级 C++] 第 5 题

[GESP202312 五级 C++] 第 5 题

下面的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;
}

{{ select(1) }}

  • if(pHead) {p->next = pHead->next, pHead->next->prev = p;}
  • if(pHead->next) {p->next = pHead->next, pHead->next->prev = p;}
  • p->next = pHead->next, pHead->next->prev = p;
  • 触发异常,不能对空指针进行操作。