考虑下面给出的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的末尾。答案: (B)
说明:如问题中所述,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->空 - 情况2:如果列表为NULL:如果列表n为空并且自身为NULL,则联接和引用显然会产生NULL指针问题。
因此选项B是正确的
这个问题的测验