Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 反向链表导致循环 为什么这会导致循环?_C++_Data Structures_Linked List - Fatal编程技术网

C++ 反向链表导致循环 为什么这会导致循环?

C++ 反向链表导致循环 为什么这会导致循环?,c++,data-structures,linked-list,C++,Data Structures,Linked List,我试图使用迭代的方法来创建反向链表,但是当head节点被遍历时会发生循环(例如print()。我用C#试过这个,没有问题(当然是修改了语法) head\u ref=*prev覆盖节点,因为head\u ref是节点&,而不是节点*&。鉴于您打算更新头指针,而不是整个节点头_ref引用 一个解决办法是: void Reverse(Node*& head) { Node* current = head; // ... head = prev; } // ... Rev

我试图使用迭代的方法来创建反向链表,但是当head节点被遍历时会发生循环(例如print()。我用C#试过这个,没有问题(当然是修改了语法)


head\u ref=*prev
覆盖
节点
,因为
head\u ref
节点&
,而不是
节点*&
。鉴于您打算更新
指针,而不是整个
节点
头_ref
引用

一个解决办法是:

void Reverse(Node*& head) {
    Node* current = head;
    // ...
    head = prev;
}
// ...
Reverse(head);
或者:

Node* Reverse(Node* head) {
    Node* current = head;
    // ...
    return prev;
}
// ...
head = Reverse(head);

在调试器中单步执行以查看这是否实际正常工作是值得的。遍历节点时会发生循环(例如print())。不知道为什么该代码会导致循环链表。如果不调试,至少打印指针以查看它们何时开始重新出现。这可能会给你一个线索。如果你无意中创建了一个循环,你的打印代码将永远不会停止运行。后一种解决方案对我有效。谢谢但是,这里的代码没有创建循环。void Reverse(Node&head\u ref){Node*temp=&head\u ref;temp->data=30;temp->next->data=40;head\u ref=*temp;}@Binary01在实现列表时,为了保持一致性,您可能只想使用
Node*
0x0108ed10 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {...} } } } }
    data: 2
    next: 0x00eff190 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {data=2 next=0x00eff190 {...} } } } }
void Reverse(Node*& head) {
    Node* current = head;
    // ...
    head = prev;
}
// ...
Reverse(head);
Node* Reverse(Node* head) {
    Node* current = head;
    // ...
    return prev;
}
// ...
head = Reverse(head);