若将 `MergeList` 函数中 `pc->next = pa?pa:pb;` 这行代码替换为 `pc->next = pa; if (!pa) pc->next = pb;`,在其他代码不变的情况下,对于任意按值排序的输入链表 `La` 和 `Lb` ,以下关于修改后函数行为的描述哪个是正确的?

答案解析

原代码 `pc->next = pa?pa:pb;` 的作用是将剩余的链段链接到 `Lc` 的末尾。修改后的代码先将 `pc->next` 指向 `pa`,然后判断如果 `pa` 为 `NULL`,则将 `pc->next` 指向 `pb`。当 `La` 为空时,`pa` 为 `NULL`,`pc->next` 会被赋值为 `pb`。如果 `Lb` 非空,则 `pc->next` 会指向 `Lb` 的剩余部分,正确链接。当 `Lb` 为空时,`pb` 为 `NULL`,`pc->next` 仍然为 `NULL`。 故选项A正确。选项B错误,修改后的函数不会在 `La` 为空链表但 `Lb` 非空时导致循环引用。选项C错误,修改后的函数不会在 `Lb` 为空链表但 `La` 非空时导致循环引用,并且始终会正确链接。选项D错误,程序不会因为修改后的代码而崩溃,并且依旧会释放`Lb`的头结点。
正确答案:A
随机推荐
开始刷题