考虑下面给出的 C 代码片段。
typedef struct node
{
int data;
node* next ;
} node;
void join(node* m, node* n)
{
node* p = n;
while (p->next != NULL)
{
p = p->next;
}
p–>next = m;
}
假设m和n指向有效的以 NULL 结尾的链表, join 的调用将
(A)将列表 m 附加到所有输入的列表 n 的末尾
(B)要么导致空指针取消引用,要么将列表 m 附加到列表 n 的末尾
(C)导致对所有输入的空指针取消引用。
(D)对于所有输入,将列表 n 附加到列表 m 的末尾。答案:(乙)
解释:正如问题中所述,m 和 n 是有效列表,但未明确指定列表是否为空。我们可以有两种情况:
- 情况 1:如果列表不是 NULL :如果列表不是 NULL,则调用 join 会将列表 m 附加到列表 n 的末尾。例如:在加入操作之前:
m =1->2->3->4->5->null
n =6->7->8->9->null 加入操作后:
6->7->8->9->1->2->3->4->5->null - 情况 2:如果列表为 NULL :如果列表 n 为空且本身为 NULL,那么加入和引用显然会产生 NULL 指针问题。
所以选项B是正确的
这个问题的测验