链接列表仅显示输入的最后值

时间:2016-05-17 04:03:05

标签: c++ linked-list

我正在努力变得更加擅长链接列表。我观看了几个视频并阅读了多个论坛帖子,但我仍然遇到问题。我试图从一个简单的链表开始。但是,使用我当前的代码只打印最后一个值。如果有人能向我解释我做错了什么,我真的很感激。另外,我通常在main.cpp文件中定义所有函数。但是,它不允许我为我的链表执行此操作。另外,定义main.cpp文件中的所有函数是一个很好的做法还是我应该破坏的习惯?

提前谢谢:)。 以下是我的链接列表文件:

  #pragma once
#include <iostream>
using namespace std;

class LinkedList {
    struct node {
        int data;
        node *next;

    };
public:
    LinkedList() {
        head = NULL;
    }

    node *newNode;
    node *temp;
    node *head;

    void insertData(int value) {
        newNode = new node;
        newNode->data = value;
        temp = newNode;
        head = newNode;
        temp->next = newNode;
        temp = temp->next;
        newNode->next = NULL;
    }

    void printList() {
        node *print;
        print = head;
        while (print != NULL) {
        cout << print->data;
        print = print->next;
        }
    }

};

这是我的main.cpp文件

#include <iostream>
#include "LinkedList.h"
using namespace std;
int main() {
    LinkedList list;
    list.insertData(1);
    list.insertData(2);
    list.insertData(3);
    list.printList();


    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

void insertData(int value) {
    newNode = new node;
    newNode->data = value;
    temp = newNode;
    head = newNode;
    temp->next = newNode;
    temp = temp->next;
    newNode->next = NULL;
}

在您的代码中,head = newNode接受head指向的任何内容,并将其抛出以支持newNode。基本上,每次尝试在列表中插入新值时,都会丢弃整个列表。

相反,您的插入应该执行类似

的操作
void insertData(int value) {
    newNode = new node; //Create ourselves a new node
    newNode->data = value; //Put the proper value in
    newNode->next = head; //Make it so the whole list is after our node
    head = newNode; //Make our node the first in the list
}

您的代码中还有其他一些我建议更改的内容,例如当您将newNodetemp作为成员变量时,它们可能只是函数的本地变量,而您缺少析构函数。但是您的打印功能应该与修改后的插入一起使用(参见它运行here)。