我正在努力变得更加擅长链接列表。我观看了几个视频并阅读了多个论坛帖子,但我仍然遇到问题。我试图从一个简单的链表开始。但是,使用我当前的代码只打印最后一个值。如果有人能向我解释我做错了什么,我真的很感激。另外,我通常在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;
}
答案 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
}
您的代码中还有其他一些我建议更改的内容,例如当您将newNode
和temp
作为成员变量时,它们可能只是函数的本地变量,而您缺少析构函数。但是您的打印功能应该与修改后的插入一起使用(参见它运行here)。