📜  门| GATE CS 2010 |第36章

📅  最后修改于: 2021-06-29 20:42:48             🧑  作者: 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-> 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/。
这个问题的测验