我试图在C++中实现一个链表,并使用以下方法对其进行初始化:

ListNode *ll = new ListNode(0);
ListNode *head = ll;
for(int i = 1; i <= 8; i++) {
    ll->next = &ListNode(i);
    ll = ll->Next;
}

问题在于,在每次迭代期间,当ll被重新分配以指向其下一个时,头指针也将被重新分配。因此,每次迭代之后,head指针如下所示:

0-> 1

0-> 2

0-> 3

...

0-> 8

而不是应该是:

0-> 1-> 2 ...-> 8

移动迭代指针时,如何保持Head指针不被更改?

这是struct ListNode:
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
} typedef ListNode;

最佳答案

您的代码有一个大问题:

temp->next = &ListNode(i);

这试图获取临时变量的地址并将其存储在某处。但是,在移至下一行后,便会临时删除临时地址,因此您最终得到一个指向垃圾的地址。

顺便说一句,它甚至不能编译,因此,如果编译器允许这样做,那就是编译器中的错误。

关于c++ - 遍历迭代列表时如何避免重新分配它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35727728/

10-09 20:10