C++ 中的链表,没有指向 Node 类的指针

问题描述 投票:0回答:1

如上面标题所示,我尝试在 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();
 }
c++ data-structures linked-list infinite-loop
1个回答
0
投票

看看你的

insert
方法:

void insert (int data) {                 
         Node t;              
         t.data=data;                        
         t.link = &head;                      
         head = t;                            
     }

你永远不会在这里分配任何内存。您只需覆盖内容即可

head
的值写入临时变量
t
。 因此,在调用 insert 之后,
head.link
最终将指向
head
(本身), 这就是为什么你会得到无限循环。

© www.soinside.com 2019 - 2024. All rights reserved.