C ++链表奇怪的输出

时间:2017-06-07 20:06:51

标签: c++ linked-list

所以我一直在尝试编写链表。当我调试或如果我再添加一个这样的打印语句;

getChildren()

它的打印效果很好;

intlist.add_node(7);
intlist.print_list();
intlist.add_node(8);

但是,如果我删除该声明,它只打印三个八。同样适用于调试,它似乎有效,但如果我只是运行它没有。我不明白什么是错的。 这是我的主要内容;

5
7
5
7
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;
};

1 个答案:

答案 0 :(得分:3)

你的add_node函数应该是:

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;
  }
}

您不需要创建新的Node对象,因为您只想参考头部。 delete temp实际上会删除temp之前指向的地址内容,这是您列表中的最后一个元素。