我正在尝试在 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 指针不被更改?
这是 ListNode 结构体:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
} typedef ListNode;
最佳答案
你的代码有一个大问题:
temp->next = &ListNode(i);
这会尝试获取临时变量的地址并将其存储在某处。但是,在您移动到下一行后,temporary 会立即被清除,因此您最终会得到一个指向垃圾的地址。
顺便说一句,这甚至不应该是可编译的,所以如果您的编译器允许这样做,那将是编译器中的一个错误。
关于c++ - 在遍历链表时,如何避免分配链表中的头指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35727728/