我正在尝试创建一个复制节点的函数。我试图让程序出错或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);
}
答案 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()
的作用。