我正在尝试在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);
这会尝试获取临时变量的地址并将其存储在某个地方。但是临时在你移动到下一行后立即被根除,所以你最终得到一个指向垃圾的地址。
顺便说一下,这甚至不应该是可编译的,所以如果你的编译器允许这样做,那就是编译器中的一个错误。