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