C链表头指向自己?

时间:2016-11-13 22:31:16

标签: c linked-list nodes

这是我的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。如果无法从这里推断出错误,那么我猜错误在我的代码中的其他地方。如果是这样,我也可以把它放在这里。

由于

1 个答案:

答案 0 :(得分:4)

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

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

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

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