C语言 链表抛出无限循环,但最新指针设置为 null



我写了一个链表,当我做追加到结尾时,它似乎进入了一个无限循环。

// this function will make a node and give it a value at the end of the list
void add_at_end(struct Node* begin, int v) {
    // new node
    struct Node* temporary = begin; // pointer to start of list
    temporary->vv = v;
    temporary->nx = NULL; // latest node
    if (begin == NULL) { // this will make a new list if it is empty
        begin = temporary;
        return;
    }
    struct Node* iterate = begin;
    while (iterate->nx != NULL) { iterate = iterate->nx; }
    iterate->nx = temporary;
    return;
}

我用以下方法称呼它:

struct Node alpha;
add_at_end(&alpha, 1);

为什么这会抛出一个无限循环?

  • alpha不是启动的,它包含垃圾,包括下一个指针。访问内容是未定义的行为,这可能会导致无限循环......或崩溃..什么的。
  • begin = temporary;这会在
  • 局部范围内设置变量,并且不会对传递给函数的内容产生任何影响。您可以将指针传递给指针 ( ** (,也可以将现有节点传递给函数(在这种情况下,无需检查(。你正在做这些没有意义的混合。
  • 仅仅为了添加一个元素而遍历整个列表是非常低效的。您应该维护指向最后一个节点的链接,以便它成为 O(1( 操作。

相关内容

  • 没有找到相关文章

最新更新