📜  门|门CS 2010 |第 36 题

📅  最后修改于: 2021-09-25 07:43:35             🧑  作者: Mango

以下 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-> 下一个 = 头;头 = p;
(B) q->next = NULL;头 = p; p-> 下一个 = 头;
(C)头 = p; p->next = q; q->next = NULL;
(D) q->next = NULL; p-> 下一个 = 头;头 = p;答案: (D)
说明: while 循环结束时,q 包含倒数第二个节点的地址,p 包含最后一个节点的地址。所以我们需要在while循环之后做以下事情。
i) 将 q 的 next 设置为 NULL (q->next = NULL)。
ii) 将 p 的 next 设置为 head (p->next = head)。
iii) 将头设为 p ( head = p)
步骤 (ii) 必须在步骤 (iii) 之前进行。如果我们先改变头,那么我们就失去了原始链表中头节点的跟踪。
有关更多详细信息,请参阅 https://www.geeksforgeeks.org/move-last-element-to-front-of-a-given-linked-list/。
这个问题的测验