c:使用函数将新节点插入单链表
c: inserting new nodes to a singly linked list using a function
我使用一个函数将新节点插入到我的单链表中,但是当我在插入后打印出节点内的所有值时,我只得到第一个节点的值:
// Make list
createList(head, 17);
// Insert to list
for (int x = 9; x > 0; x /= 3)
{
if (!insertToList(head, x))
{
fprintf(stderr, "%s", error);
return 1;
}
}
函数:
bool insertToList(NODE *head, int value)
{
NODE *node = malloc(sizeof(NODE));
if (node == NULL)
return false;
node -> number = value;
node -> next = head;
head = node;
return true;
}
-- 输出:17
当我不使用功能时,一切都按预期工作:
// Make list
createList(head, 17);
// Insert to list
for (int x = 9; x > 0; x /= 3)
{
NODE *node = malloc(sizeof(NODE));
if (node == NULL)
{
fprintf(stderr, "%s", error);
return 1;
}
node -> number = x;
node -> next = head;
head = node;
}
-- 输出:1 3 9 17
为什么?
您在函数中传递指针,更新它而不是 return返回,在这种情况下,外部函数永远无法知道头部是否已更改。您还必须在 for 循环中适当地更新头部。
在你不使用该函数的情况下,每次插入时你的for循环都会知道head的正确地址。
可能如果您 return 头指针并正确更新它,它应该可以解决您的问题。
我使用一个函数将新节点插入到我的单链表中,但是当我在插入后打印出节点内的所有值时,我只得到第一个节点的值:
// Make list
createList(head, 17);
// Insert to list
for (int x = 9; x > 0; x /= 3)
{
if (!insertToList(head, x))
{
fprintf(stderr, "%s", error);
return 1;
}
}
函数:
bool insertToList(NODE *head, int value)
{
NODE *node = malloc(sizeof(NODE));
if (node == NULL)
return false;
node -> number = value;
node -> next = head;
head = node;
return true;
}
-- 输出:17
当我不使用功能时,一切都按预期工作:
// Make list
createList(head, 17);
// Insert to list
for (int x = 9; x > 0; x /= 3)
{
NODE *node = malloc(sizeof(NODE));
if (node == NULL)
{
fprintf(stderr, "%s", error);
return 1;
}
node -> number = x;
node -> next = head;
head = node;
}
-- 输出:1 3 9 17
为什么?
您在函数中传递指针,更新它而不是 return返回,在这种情况下,外部函数永远无法知道头部是否已更改。您还必须在 for 循环中适当地更新头部。
在你不使用该函数的情况下,每次插入时你的for循环都会知道head的正确地址。
可能如果您 return 头指针并正确更新它,它应该可以解决您的问题。