这是我的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
。整个if
和newNode.next = NULL
分支是完全没有必要的。