Почему это вызывает al oop?
Я пытаюсь создать список с обратной связью, используя итеративный метод, но al oop возникает, когда головной узел перемещается (например, print () ). Я пробовал это с C#, и у меня не было проблем (конечно, с измененным синтаксисом).
struct Node {
int data;
Node* next;
};
void
Reverse(Node& head_ref) {
Node* current = &head_ref, *next = nullptr, *prev = nullptr;
while (current != nullptr) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head_ref = *prev; //strange phenomenon happened here after head_ref is set.
}
int
main() {
Node* head = new Node();
Node* first = new Node();
head->data = 1;
head->next = first;
first->data = 2;
first->next = nullptr;
Reverse(*head);
while (head != nullptr) { // <-- infinite loop
cout << head->data << endl;
head = head->next;
}
return 0;
}
prev переменная в Reverse (...) метод при возврате:
0x0108ed10 {data=2 next=0x00eff190 {data=1 next=0x00000000 <NULL> } }
data: 2
next: 0x00eff190 {data=1 next=0x00000000 <NULL> }
After head_ref установлено, он создает связанный список цикла:
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 {...} } } } }