制作cpnode函数?

时间:2016-09-01 14:47:53

标签: c debugging nodes

我正在尝试创建一个复制节点的函数。我试图让程序出错或NULL返回NULL,我只能有一个return语句

我有以下代码,我不知道还有什么可以从这里做..任何提示/建议我会非常感谢

Node *cpnode(Node *curNode)
{
      if (curNode == NULL) return NULL;
      Node *result = malloc(sizeof *result);
      result -> value = curNode -> value;
      result -> next = cpnode(curNode -> next;

return(result); 
}

编辑:

我在编译时编辑了我的代码我遇到了错误,例如 Node没有名为'value'和'next'的成员。这是为什么?

另外我知道我可以在if语句上轻松返回NULL,并在结束时返回我的结果但是如果只有一个返回语句时出现错误的NULL?

要定义我的Node,我必须做这样的事情:

Node *cpnode(Node *curNode)
{
  struct Node{
                 *result;
                 *value;
                 *next;
  }
  if (curNode == NULL) return NULL;
  Node *result = malloc(sizeof *result);
  result -> value = curNode -> value;
  result -> next = cpnode(curNode -> next;

  return(result); 
}

1 个答案:

答案 0 :(得分:1)

您的代码存在以下问题:您的节点结构未正确定义,并且您将其用作不是typedef的类型;您的文本谈到了复制节点,但您的代码复制了一个链接的节点列表; result似乎不应该是Node结构的一部分;你的代码在语法上不正确(例如缺少paren)。

这是将代码重新编译成可编译和运行的东西。由于您没有指定value的类型,我假设它是下面的字符串,但您可以将其更改为您想要的任何内容:

#include <stdlib.h>
#include <stdio.h>

typedef struct Node
{
    char *value;
    struct Node *next;
} Node;

Node *copyNodes(Node *currentNode)
{   
    Node *result = NULL;

    if (currentNode != NULL)
    {
        if ((result = malloc(sizeof *result)) != NULL)
        {
            result->value = currentNode->value;
            result->next = copyNodes(currentNode->next);
        }
    }

    return result; 
}

void freeNodes(Node *currentNode)
{
    if (currentNode != NULL)
    {
        if (currentNode->next != NULL)
        {
            freeNodes(currentNode->next);
            currentNode->next = NULL;
        }
    }
    free(currentNode);
}

int main()
{
    Node a, b;

    b.value = "last";
    b.next = NULL;

    a.value = "first";
    a.next = &b;

    Node *c = copyNodes(&a);

    printf("%s\n", c->next->value);

    freeNodes(c);

    return 0;
}

如果我们使用malloc()制作所有节点的副本,那么完成后,我们需要以与创建它们的方式类似的方式释放所有副本。这就是函数freeNodes()的作用。