尝试创建内联列表。我在LinkedList.cpp文件中创建的deleteNode
函数中遇到问题。遇到错误
LinkedList.exe中0x00D04C3C处的未处理异常:0xC0000005: 访问冲突读取位置0x00000004。
previous->link = temp->link;
LinkedList.h文件
class Node
{
public:
int data;
Node *link;
};
class LList
{
private:
Node *Head, *Tail;
//void recursiveTraverse(Node *);
public:
LList();
~LList();
void create();
Node *getNode();
void append(Node *);
void insert(Node *, int);
void rtraverse();
void deleteNode(int);
void display();
};
LinkedList.cpp
#include "stdafx.h"
#include "LinkedList.h"
#include <iostream>
using namespace std;
LList::LList()
{
Head = nullptr; Tail = nullptr;
}
LList::~LList()
{
Node *Temp;
while (Head != nullptr)
{
Temp = Head;
Head = Head->link;
delete Temp;
}
}
void LList::create()
{
char choice;
Node *newNode = nullptr;
while (5)
{
cout << "Enter Data in the List (Enter N to cancel) ";
cin >> choice;
if (choice == 'n' || choice == 'N')
{
break;
}
newNode = getNode();
append(newNode);
}
}
Node *LList::getNode()
{
Node *temp = new Node;
//cout << "Enter Data in the List";
cin >> temp->data;
temp->link = nullptr;
return temp;
}
void LList::append(Node *temp)
{
if (Head == nullptr)
{
Head = temp;
Tail = temp;
}
else
{
Tail->link = temp;
Tail = temp;
}
}
void LList::display()
{
Node *temp = Head;
if (temp == nullptr)
{
cout << "No Item in the List" << endl;
}
else
{
while (temp != nullptr)
{
cout << temp->data << "\t";
temp = temp->link;
}
cout << endl;
}
}
void LList::insert(Node *newNode, int position)
{
int count = 0; Node *temp, *previous = nullptr;
temp = Head;
if (temp == nullptr)
{
Head = newNode;
Tail = newNode;
}
else
{
while (temp == nullptr || count < position)
{
count++;
previous = temp;
temp = temp->link;
}
previous->link = newNode;
newNode->link = temp;
}
}
void LList::deleteNode(int position)
{
int count = 1; Node * temp, *previous = nullptr;
temp = Head;
if (temp == nullptr)
{
cout << "No Data to delete." << endl;
}
else
{
while (count <= position + 1)
{
if (position == count + 1)
{
count++;
previous = temp;
previous->link = temp->link;
}
else if (count == position + 1)
{
count++;
previous->link = temp->link;
}
count++;
temp = temp->link;
}
}
}
Main.cpp到这里
答案 0 :(得分:0)
看起来temp不能在给出错误的行上为nullpointer,但之前可能是。
重要提示:请注意该行
else if (count = position + 1)
实际上是一项任务。你可能意味着
else if (count == position + 1)
之前的if语句也是如此。
干杯!
答案 1 :(得分:0)
我发现这里有很多错误,其中任何一个都可能导致你的问题。如果他们没有修复它,我可以再看看是否有其他人没有先找到它。
首先,删除函数中的if语句将始终执行。因为您要分配而不是检查相等性,即'='而不是'=='。仅这一点就可以解决问题。
跳出页面的另一件事是你显然是动态地分配每个节点,你的删除功能应该在你完成后删除内存。
先修复这两个,然后看看你在哪里。