首页 > 解决方案 > 在 C 中跟踪链表中的头节点

问题描述

typedef struct node
{
    int data;
    struct node* next;
}node;

node * display(node * head)
{
    node * tmp = head;
    printf("%d\n", tmp->data);
    tmp = tmp->next;
    printf("%d\n", tmp->data);
}

node * create()
{
    // create nodes
    node * head = NULL;
    head = malloc(sizeof(struct node));

    // assign tmp to the head of the node
    node *tmp = NULL;
    tmp = head;

    // place data into head node
    head->data = 2;
    printf("%d\n", head->data);

    // move to next null and create space, then insert data
    head = head->next;
    head = malloc(sizeof(node));
    head->data = 5;
    printf("%d\n", head->data);

    display(tmp);
}




int main(int argc, char *argv[]) 
{   
    create();

    return 0;
}

使用这段代码,我试图创建一个简单的链表,并将head指针传递给一个名为display. 但是,当我运行程序时,打印的数字是“2”和“159088”,而不仅仅是“2”和“5”。我应该如何传递和跟踪head指针?

标签: cpointers

解决方案


你没有真正链接你的列表。您永远不会指向head->next为第二个值分配的节点。尝试这样的改变:

// create next node, then insert data
head->next = malloc(sizeof(node));
head = head->next; 
head->data = 5; 
printf("%d\n", head->data);

你也应该仔细阅读你收到的所有评论;尽管您还没有遇到它们,但您的代码中还有一些错误,主要是缺少函数返回和未初始化的数据。

另请注意,链表的真正强大之处在于您无需提前知道它们的长度。添加 2 个值,然后打印 2 个值,很好,但您应该使用循环遍历整个列表以打印它,沿着每个链接到下一个节点,直到到达null.

从您对代码和问题的评论中,我可以看出您对NULL. NULL不是一个空的地方,它是一个未设置的指针。显式设置为的指针NULL没有值,而不是空值。您说“移动到下一个 null 并创建空间,然后插入数据”,但您应该做的是“分配下一个节点,将其地址存储在 中head->next,并设置其数据”。


推荐阅读