gpt4 book ai didi

使用append复制C中的链表

转载 作者:行者123 更新时间:2023-11-30 16:48:21 24 4
gpt4 key购买 nike

struct node* copyList()
{
//check if empty
if(head==NULL){
return NULL;}
//create head
struct node* p_head=head;//pointer to original head
struct node* newHead = NULL; //head of new list
struct node* p_newHead=newHead;//pointer to new head
while(p_head!=NULL)
int data=p_head->data;
m_appendNode(data, p_newHead);
p_head=p_head->next;
}
return newHead;
}

当我运行程序时,我的头保持空状态而不是构建列表。请让我知道我缺少什么。谢谢

编辑:追加函数

void m_appendNode(int data, struct node *newHead)
{
struct node* current=newHead;
if(newHead!=NULL){
while((current->next)!=NULL){
current = current->next;
}
current->next=malloc(sizeof(struct node));
current->next->data=data;
current->next->next=NULL;
}
else{
struct node* newnode=malloc(sizeof(struct node));
newnode->data=data;
newHead=newnode;
newnode->next=NULL;
}
}

最佳答案

首先,我假设 copyList 中的 while 之后应该有一个“{”。

接下来,您必须了解作为参数传递给 C 函数的值会发生什么情况。发生的情况是函数复制参数并将它们视为局部变量,这些变量在函数结束后会被忘记。

简单的例子是

void foo ( int a )
{
a=10;
}
void bar ( void )
{
int b = 1;
foo ( b );
}

在调用 foo 后,在 bar 中,b 的值(即 1)被复制,foo 将其更改为 10,然后返回到 bar,其中 b 仍然不变,值为 1。

您可以用它做的是将指针传递给该函数。在我们的示例中:

void foo ( int * a )
{
*a=10;
}
void bar ( void )
{
int b = 1;
foo ( &b );
}

在小节末尾,b 的值确实为 10。

现在让我们看看你的代码,你基本上在做同样的事情,你将指向 newHead 的指针传递给 m_appendNode 并期望它发生变化。在我看来,您有两个选择,要么将指针传递给指针(即 struct node ** newHead )并在各处添加大量星号,要么只是使函数返回 struct node * 。并将其命名为newHead = m_appendNode(data, p_newHead); .

后者更简单,但我建议您也尝试第一个选项,以获得更好的指导。

关于使用append复制C中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com