以下C函数将简单链接列表作为输入参数。它通过将最后一个元素移到列表的前面来修改列表,并返回修改后的列表。代码的某些部分留为空白。
typedef struct node
{
int value;
struct node *next;
}Node;
Node *move_to_front(Node *head)
{
Node *p, *q;
if ((head == NULL: || (head->next == NULL))
return head;
q = NULL; p = head;
while (p-> next !=NULL)
{
q = p;
p = p->next;
}
_______________________________
return head;
}
选择正确的替代方法来替换空白行。
(A) q = NULL; p-> next = head;头= p;
(B) q->下一个= NULL;头= p; p-> next = head;
(C)头= p; p-> next = q; q-> next = NULL;
(D) q->下一个= NULL; p-> next = head;头= p;答案: (D)
说明: while循环结束时,q包含倒数第二个节点的地址,p包含倒数第二个节点的地址。因此,我们需要在while循环之后执行以下操作。
i)将q的下一个设置为NULL(q-> next = NULL)。
ii)将p的下一个设置为head(p-> next = head)。
iii)将头设为p(头= p)
步骤(ii)必须在步骤(iii)之前执行。如果我们先改变头,那么我们将失去原始链表中头节点的踪迹。
有关更多详细信息,请参见https://www.geeksforgeeks.org/move-last-element-to-front-of-a-given-linked-list/。
这个问题的测验