Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++;链接列表输出_C++_Linked List - Fatal编程技术网

C++ C++;链接列表输出

C++ C++;链接列表输出,c++,linked-list,C++,Linked List,所以我一直在尝试编写一个链表。当我调试时,或者如果我再放一条这样的打印语句 intlist.add_node(7); intlist.print_list(); intlist.add_node(8); 它可以制作精美的印刷品 5 7 5 7 8 但如果我去掉那句话,它只印三个8。调试也是一样,它似乎可以工作,但如果我只是运行它就不行了。我不明白怎么了。 这是我的主要观点 int main(){ Linked_list intlist; intlist.add_node(5);

所以我一直在尝试编写一个链表。当我调试时,或者如果我再放一条这样的打印语句

intlist.add_node(7);
intlist.print_list();
intlist.add_node(8);
它可以制作精美的印刷品

5
7
5
7
8
但如果我去掉那句话,它只印三个8。调试也是一样,它似乎可以工作,但如果我只是运行它就不行了。我不明白怎么了。 这是我的主要观点

int main(){
  Linked_list intlist;
  intlist.add_node(5);
  intlist.add_node(7);
  intlist.print_list();
  intlist.add_node(8);
  intlist.print_list();
  return 0;
}
收割台

class Linked_list{
public:
  Linked_list();

  void add_node(int data);
  void remove_node(int data);
  int get_data(int index);
  void print_list();

  struct Node {
      int data;
      Node* next;
  };

  Node* head;
  int lenght;
};
和头的源文件

Linked_list::Linked_list(){
  head = 0;
  lenght = 0;
}

void Linked_list::add_node(int data){
  Node* newnode = new Node;
  newnode->data = data;
  newnode->next = NULL;
  if (head == 0) {head = newnode; lenght = 1; return;}
  else{
      Node* temp = new Node;
      temp = head;
      while (temp->next != NULL){
          temp = temp->next;

      }
      lenght++;
      temp->next = newnode;
      delete temp;
  }
}


void Linked_list::remove_node(int data){
    return;
}

int Linked_list::get_data(int index){
    return 0;
}

void Linked_list::print_list(){
    if (head == 0) {std::cout << "List is empty!!" << std::endl; 
    return;}
    else{
        Node* ptr = new Node;
        ptr = head;
        for (int i = lenght; i > 0; i--){
            std::cout << ptr->data << std::endl;
            ptr = ptr->next;
        }
    }
}
Linked_list::Linked_list(){
水头=0;
长度=0;
}
无效链接列表::添加节点(int数据){
Node*newnode=新节点;
新建节点->数据=数据;
newnode->next=NULL;
if(head==0){head=newnode;lenght=1;return;}
否则{
Node*temp=新节点;
温度=水头;
while(临时->下一步!=NULL){
温度=温度->下一步;
}
长度++;
temp->next=newnode;
删除临时文件;
}
}
无效链接的_列表::删除_节点(int数据){
返回;
}
int-Linked_-list::获取_数据(int-index){
返回0;
}
作废链接列表::打印列表(){

如果(head==0){std::cout您的add_节点函数应该是:

void Linked_list::add_node(int data) {

  Node* newnode = new Node;
  newnode->data = data;
  newnode->next = NULL;

  if (head == 0) {
      head = newnode;
      lenght = 1;
      return;
  } else {
      //Node* temp = new Node;
      Node *temp = head;
      while (temp->next != NULL) {
          temp = temp->next;
      }

      lenght++;
      temp->next = newnode;
      //delete temp;
  }
}

您不需要创建新的
节点
对象,因为您只需要查看引用头。
delete temp
实际上删除了先前由
temp
指向的地址的内容,这是列表中的最后一个元素。

删除内存泄漏是很好的,但这并不能回答OP的问题。也许我需要idn当时没有得到它,但此删除肯定会中断打印,因为已删除节点的数据不再可访问。第二条注释掉的行是真正的罪魁祸首:)第一次没有看到。您的打印列表中有一个错误。为什么要分配节点,然后在下一条语句中泄漏分配的内存。