📜  门| GATE-CS-2017(套装1)|第 30 题

📅  最后修改于: 2021-09-25 04:38:59             🧑  作者: Mango

考虑下面给出的 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;
}

假设mn指向有效的以 NULL 结尾的链表, join 的调用将
(A)将列表 m 附加到所有输入的列表 n 的末尾
(B)要么导致空指针取消引用,要么将列表 m 附加到列表 n 的末尾
(C)导致对所有输入的空指针取消引用。
(D)对于所有输入,将列表 n 附加到列表 m 的末尾。答案:(乙)
解释:正如问题中所述,m 和 n 是有效列表,但未明确指定列表是否为空。我们可以有两种情况:

  1. 情况 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. 情况 2:如果列表为 NULL :如果列表 n 为空且本身为 NULL,那么加入和引用显然会产生 NULL 指针问题。

所以选项B是正确的
这个问题的测验