如何防止链表中的头部指针在迭代时被重新签名



我正在尝试在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);

这会尝试获取临时变量的地址并将其存储在某个地方。但是临时在你移动到下一行后立即被根除,所以你最终得到一个指向垃圾的地址。

顺便说一下,这甚至不应该是可编译的,所以如果你的编译器允许这样做,那就是编译器中的一个错误。

相关内容

  • 没有找到相关文章

最新更新