c - 在 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
指针?
解决方案
你没有真正链接你的列表。您永远不会指向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
,并设置其数据”。
推荐阅读
- python-3.x - Python aiosqlite 覆盖与 pysqlcipher3 的连接
- python - 检查一个数字在 Python 中是否具有相同的数字
- oauth-2.0 - 调用 Xero 刷新令牌 api 时出现错误“unsupported_grant_type”
- javascript - 如何将反应选项卡链接到下拉列表?
- python - 将数据框列与二维列表 python 进行比较
- javascript - 如何将两个相邻的 DIV 合并为一个?
- jira-rest-api - 如何打开 doc.atlassian.com 的 .wadl 文件?
- solr - 如何帮助我的 Solr 引擎理解相关术语?
- ssl - 使用 HTTPS 在 Apache Ignite 中访问 REST API
- python - 卡尔曼滤波器给出奇怪的结果