第 1 题
已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为
其中 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);
[tag_link]
正确答案:D
删除 头结点后一个结点的基本流程为q = h->next; h->next = q->next; free(q);,即通过指针操作跳过下一个结点后删除该结点。 由于题目中提到了该链表非空,所以可以确定q = h->next一定不为空。 但是如果链表中只有一个结点的话,我们还需要在删除该结点后,将尾指针指向头结点的位置,即if (p == q) p = h;