这是我的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++;
}
P.S。如果无法从这里推断出错误,那么我猜错误在我的代码中的其他地方。如果是这样,我也可以把它放在这里。
由于
答案 0 :(得分:4)
首先,您的代码声明了一个局部变量newNode
,并尝试将其包含在列表中。
函数退出时会破坏局部变量。这是newNode
退出时addNode
发生的情况。并且您的列表最终处于无效状态 - 您的head
最终指向无处。这就是导致你观察到的行为的原因。 (当您尝试将其打印出来时,行为绝对是未定义的。)
您必须在动态内存中分配节点对象,以确保它们“永远”存在或只要您想要它们。
其次,您的节点添加逻辑不必要地过于复杂。您似乎总是计划将新节点添加到列表的开头。在这种情况下,新节点的next
字段应始终设置为指向前head
。完整的if
newNode.next = NULL
分支是完全没必要的。