在C的链接列表中跟踪头节点

时间:2018-08-12 22:20:45

标签: c pointers

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指针?

1 个答案:

答案 0 :(得分:1)

您实际上没有链接您的列表。您永远不要将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个值是很好的做法,但是您应该使用循环遍历 entire 列表以打印它,并跟随每个链接到下一个节点,直到到达null

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