第 1 题
数据结构已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为 data next ,其中 next 是指向直接后继结点的指针,p 是尾指针,q 是临时指针。现要删除该链表的第一个元素,正确的语句序列是( )。
A. h->next = h->next->next; q=h->next; free(q);
B. q=h->next; h->next = h->next->next; free(q);
C. q=h->next; h->next = q->next; if(p!=q)p=h; free(q);
D. q=h->next; h->next = q->next; if(p==q)p=h; free(q);
查看答案与解析
参考答案:D
题目详解:
要删除带头结点的非空单循环链表的第一个元素,需要执行以下步骤:
-
首先,用临时指针 保存第一个结点的地址,即 。
-
将头结点的 指针指向第二个结点,即 。
-
由于是循环链表,需要检查尾指针 是否指向第一个结点(即 )。如果是,说明删除的是链表中唯一的元素(除头结点外),此时需要将尾指针 重新指向头结点 ,即 。
-
最后,释放临时指针 指向的结点,即 。
选项 D 完全符合上述步骤:
- 保存第一个结点。
- 更新头结点的 指针。
- 处理尾指针的特殊情况。
- 释放第一个结点。
其他选项的问题:
- A:先更新 ,再 ,但 未正确指向第一个结点。
- B:未处理尾指针 的特殊情况。
- C:条件 逻辑错误,应为 。
正确答案:D









