双向循环链表中要在结点 p 之前插入新结点 s (均非空),以下指针操作正确的是( )。
A:s -> next = p; p -> prev = s; p -> next = s; s -> prev = p;
B:s -> prev = p; s -> next = p -> next; p -> next -> prev = s; p -> next = s;
C:s -> next = p; s -> prev = p->prev; p -> prev -> next = s; p -> prev = s;
D:s -> next = p; s -> prev = nullptr; p -> prev = s;
正确答案:C
答案解析
在双向循环链表中插入结点时,需修改四个指针:新结点的前驱和后继,以及前后相邻结点的后继和前驱。首先使新结点的前驱指向目标结点的前驱,新结点的后继指向目标结点。然后将原目标结点的前驱结点的后继指向新结点,目标结点的前驱指向新结点。所有指针更新必须保持原有连接不断裂,且顺序不能破坏链表结构的完整性。
试卷来源:202603 CCF-GESP编程能力等级认证C++五级真题