Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反向链表C_C_Linked List - Fatal编程技术网

反向链表C

反向链表C,c,linked-list,C,Linked List,您好,我写了这个链表反向函数。但是它不起作用(空响应):我怀疑这是因为上一个索引被覆盖了。有人能解释一下发生了什么事吗?我知道我可以在网上找到工作代码,但我想知道我做错了什么 谢谢 这实际上应该是sizeof(*root)-您需要的内存块的大小是指向的结构的大小,而不是指针的大小。因此,您可能会覆盖内存中刚刚超过所分配的指针大小的块的内容,从而导致,其中可能包含任何与预期工作不符的内容。这看起来几乎是正确的。我看到一个问题:sizeof(root)与sizeof(node*)相同。也就是说,它有

您好,我写了这个链表反向函数。但是它不起作用(空响应):我怀疑这是因为上一个索引被覆盖了。有人能解释一下发生了什么事吗?我知道我可以在网上找到工作代码,但我想知道我做错了什么

谢谢


这实际上应该是
sizeof(*root)
-您需要的内存块的大小是指向的结构的大小,而不是指针的大小。因此,您可能会覆盖内存中刚刚超过所分配的指针大小的块的内容,从而导致,其中可能包含任何与预期工作不符的内容。

这看起来几乎是正确的。我看到一个问题:
sizeof(root)
sizeof(node*)
相同。也就是说,它有足够的空间作为指向节点的指针


您需要足够的空间来容纳实际的
节点
结构。所以malloc
sizeof(*root)
bytes(或
sizeof(node)
,两者相同)。

如果您想知道,请使用调试器。是否要求您创建一个反向的新列表?您可以就地反转列表,而不创建被反转的新列表。“这个问题是由无法再复制的问题或简单的印刷错误引起的。”代码是正确的(遍历原始列表,并使用新分配的节点将项目的副本推到堆栈上。只是malloc是错误的。)
node *rever(node *root)
{
node *prev = NULL;
node *xnew = NULL;

  while (root != NULL) {

  xnew = malloc(sizeof(root));
  xnew->value = root->value;
  xnew->next = prev;

  prev = xnew;
  root = root->next;
  }



  return xnew;
}
    xnew = malloc(sizeof(root));