第 1 题
已知带头结点的非空单链表 L 的头指针为 h,指针 p 指向 L 中间的一个链表结点(不是第一个和最后一个结点)。q=p->next,p->next=q->next,q->next=h->next,h->next=q。这段代码的功能是()。
A. 把 q 指向的结点插入到 p 的后面
B. 把 p 指向的结点插入到 q 的后面
C. 把 p 指向的结点插入到 h 的后面
D. 把 q 指向的结点插入到 h 的后面
[tag_link]
正确答案:D
代码分解分析:
q = p->next;
现在 q 指向的是 p 的下一个结点。
p->next = q->next;
这一步将 q 从链表中“摘除”:原本是 p -> q -> q->next,现在变成了 p -> q->next,也就是说 q 不再出现在链表的原位置。
q->next = h->next;
这一步将 q->next 指向当前链表的第一个有效结点(注意是 h->next,即第一个结点,不是头结点)。
h->next = q;
把 q 接到头结点之后,也就是插入到链表头部(第一个有效结点之前)。操作的效果是:从链表中间删除了 q,然后把它插入到了头结点之后,也就是插入到链表第一个有效结点之前。所以这段代码的功能是:
把
q指向的结点插入到h的后面 [tag_link]
正确答案选择 D。