2021 数据结构 链表删除 选择题
第 1 题

已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为

2018_Q7_3

其中 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;