我试图在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/