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
指针?
答案 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
中存储其地址,并设置其地址。数据”。