📜  门| GATE-CS-2017(Set 1)|问题30

📅  最后修改于: 2021-06-29 01:32:41             🧑  作者: 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的末尾。答案: (B)
说明:如问题中所述,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->空
  2. 情况2:如果列表为NULL:如果列表n为空并且自身为NULL,则联接和引用显然会产生NULL指针问题。

因此选项B是正确的
这个问题的测验