你好,我想有个函数,可以在C语言的链表的末尾添加一个节点。问题是在将节点添加到列表后,列表指针为空。功能是这样的:
void addToLevels(Levels* levels, Levels* newLevel){
if (!levels)
levels = newLevel;
else {
Levels* endFinder = levels;
while (endFinder->nextLevel)
endFinder = endFinder->nextLevel;
endFinder->nextLevel = newLevel;
}
}
我猜想一个指向指针的指针可能是一个解决方案,如果有人可以解释这种机制的工作原理,我将不胜感激。非常感谢
答案 0 :(得分:0)
也许旧函数(levels
参数为空时,该函数可以返回新头吗?
答案 1 :(得分:0)
问题是您当前的函数无法更新调用方的头指针。
您当前的呼叫者可能具有以下代码:
Levels *head = NULL;
...
addToLevels(head, newLevel);
问题在于,在函数调用之后,变量head
仍为NULL。
您有两种选择来更新head
。
1)将头节点作为双指针传递,以便可以在函数内部对其进行更改:
void addToLevels(Levels** levels, Levels* newLevel){
if (*levels == NULL)
*levels = newLevel;
else {
并这样称呼它:
addToLevels(&head, newLevel);
2)返回一个级别指针,并始终让调用者将其分配给head:
Levels* addToLevels(Levels* levels, Levels* newLevel){
if (!levels)
levels = newLevel;
else {
...
...
}
return levels;
}
并这样称呼它:
head = addToLevels(head, newLevel);