如上面标题所示,我尝试在 C++ 中编写一个链表,而不使用指向 Node 类的指针,而是直接使用属于 Node 类的对象。这是我写的Linked List类中的一个方法,用于显示整个链表中的数据元素:
void display(){
Node t = head;
while (t.link!=nullptr){
cout<<t.data<<endl;
t = *head.link;
}
这会无限打印 t.data 的第一个实例。我如何进入下一个头部? (PS:我对 C++ 中链表的实现还很陌生。我很可能犯了一个明显的错误。也是 stackoverflow 的新手 - 就像我以前从未问过问题一样)
以下是完整代码供参考:
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node *link;
};
class LinkedList: public Node {
private: Node head;
public:
LinkedList(int a) {
head.data=a;
head.link=nullptr;
}
void insert (int data) {
Node t;
t.data=data;
t.link = &head;
head = t;
}
void display(){
Node t = head;
while (t.link!=nullptr){
cout<<t.data<<endl;
t = *head.link;
}
}
};
int main() {
LinkedList obj(20);
obj.insert(30);
obj.insert(40);
obj.display();
}
看看你的
insert
方法:
void insert (int data) {
Node t;
t.data=data;
t.link = &head;
head = t;
}
你永远不会在这里分配任何内存。您只需覆盖内容即可
head
的值写入临时变量 t
。
因此,在调用 insert 之后,head.link
最终将指向 head
(本身),
这就是为什么你会得到无限循环。