gpt4 book ai didi

C链表头指向自己?

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:23 25 4
gpt4 key购买 nike

这是我的 addNode 方法的代码片段。出于某种原因,我的头节点指向自己。每当我尝试打印链表的内容时,我得到的只是我头脑中的内容。

我已经知道链表了,但我正在测试是否可以使用直接结构而不是它们的指针在链表中使用。

struct Node{
char* data;
struct Node* next;
};

// Global variables
int numberOfElements = 0;
struct Node* head = NULL;

void addNode(char* inputString){
struct Node newNode;
newNode.data = inputString;
if(numberOfElements != 0){
newNode.next = head;
}
else{
newNode.next = NULL;
}
head = &newNode;
numberOfElements++;
}

附言如果不能从这里推断出错误,那么我猜错误是在我的代码中的其他地方。如果是这样,我也可以把它放在这里。

谢谢

最佳答案

  • 首先,您的代码声明一个局部变量 newNode 并尝试将其包含到列表中。

    局部变量在函数退出时被销毁。当 addNode 退出时,newNode 会发生这种情况。您的列表最终处于无效状态 - 您的 head 最终指向任何地方。这就是导致您观察到的行为的原因。 (当您尝试将其打印出来时,该行为绝对是未定义的。)

    您必须在动态内存中分配您的节点对象,以确保它们“永远”存在或只要您希望它们存在。

  • 其次,您的节点添加逻辑不必要地过于复杂。看来您总是计划将新节点添加到列表的开头。在这种情况下,新节点的next 字段应该始终 设置为指向前一个head。带有 newNode.next = NULL 分支的整个 if 是完全没有必要的。

关于C链表头指向自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579529/

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