反转链表C.

时间:2014-06-13 03:14:32

标签: c linked-list

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;
}

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

由于

2 个答案:

答案 0 :(得分:3)

这看起来很接近正确。我看到一个问题:sizeof(root)sizeof(node*)相同。也就是说,它足以容纳指向节点的指针。

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

答案 1 :(得分:0)

    xnew = malloc(sizeof(root));

那应该是sizeof(*root) - 你想要一个内存块指向的结构大小,而不是指针的大小。因此,您可能会覆盖刚刚超出您分配的指针大小的块的内存,从而生成undefined behavior,其中可能包含从预期工作到causing demons to fly out of your nose的任何内容