0
這是我得到的輸出,如上所示。
我是新來的鏈接列表。我在這裏創建一個鏈接列表並添加節點並嘗試反轉並打印列表。針對反向鏈接列表拋出異常nullptr
這裏是我的代碼:
//this is my PracImplement header file
#include <iostream>
using namespace std;
class Node {
public:
Node();
~Node();
int data;
Node* next;
};
class PracNImplement
{
public:
PracNImplement();
~PracNImplement();
void addNode(int);
void reverseList();
void printList();
void testList();
private:
Node* top = NULL;
};
//this is my PracImplement cpp file
#include "PracNImplement.h"
using namespace std;
Node::Node() {
//default constructor
}
Node::~Node() {}
PracNImplement::PracNImplement()
{
//default constructor
top = NULL;
}
PracNImplement::~PracNImplement()
{
// destructor
}
void PracNImplement::addNode(int val) {
Node* temp = new Node(); //creating a new node
temp->data = val;
temp->next = NULL;
if (top == NULL) {
top = temp; //checking the head or else feel with data(val)
}
else {
Node* temp1 = top;
while (temp1->next != NULL){
temp1 = temp1->next;
temp1->next = temp;
}
}
}
void PracNImplement::reverseList() {
Node* n1 = top;
Node* n2 = NULL;
Node* n3 = NULL;
while (n1 != NULL) {
top = n1;
n2 = n1->next;
n1->next = n3;
n3 = n1;
n1 = n2;
}
}
void PracNImplement::printList() {
Node* temp = top;
while (temp != NULL) {
cout << temp->data << endl;
temp=temp->next;
}
cout << endl;
}
//This is my test function
int main(){
PracNImplement* ttl = new PracNImplement();
ttl->addNode(20);
ttl->addNode(21);
ttl->addNode(22);
ttl->addNode(23);
ttl->addNode(24);
ttl->addNode(25);
cout << "The current list has the following items: " << endl;
ttl->printList();
ttl->reverseList();
cout << "This is the reversed list items: " << endl;
ttl->printList();
delete ttl;
}
我使用Visual Studio爲我的IDE。它會拋出錯誤,因爲
Exception thrown: write access violation.
temp was nullptr.
有人能請揭示這裏出了什麼問題嗎?
'Node * temp = NULL; //創建一個新節點'不,它不會創建一個新的節點。 – songyuanyao
@songyuanyao但是那是我聲明瞭一個名爲temp的節點指針,它被初始化爲NULL –
你沒有構造'Node','temp'是一個空指針,那麼'temp-> data'將不起作用。 – songyuanyao