如何在C中链表的末尾添加节点

时间:2019-05-21 16:23:25

标签: c linked-list

你好,我想有个函数,可以在C语言的链表的末尾添加一个节点。问题是在将节点添加到列表后,列表指针为空。功能是这样的:

void addToLevels(Levels* levels, Levels* newLevel){
      if (!levels)
          levels = newLevel;
      else { 
          Levels* endFinder = levels;
          while (endFinder->nextLevel)
               endFinder = endFinder->nextLevel;
          endFinder->nextLevel = newLevel;
      }
}

我猜想一个指向指针的指针可能是一个解决方案,如果有人可以解释这种机制的工作原理,我将不胜感激。非常感谢

2 个答案:

答案 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);