创建链表时访问冲突错误

Access violation error while creating linked list

正在尝试创建内衬列表。我在 LinkedList.cpp 文件中创建的 deleteNode 函数有问题。遇到给定错误

Unhandled exception at 0x00D04C3C in LinkedList.exe: 0xC0000005: Access violation reading location 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 到这里

看起来 temp 不能是给出错误的行的空指针,但 previous 可能是。

重要提示:请注意行

else if (count = position + 1)

实际上是一个作业。你可能是说

else if (count == position + 1)

前面的if语句也是如此

干杯!

我发现这里有很多问题,其中任何一个都可能导致您的问题。如果他们不解决它,如果其他人没有先解决它,我可以再看看。

首先,删除函数中的 if 语句将始终执行。因为您正在分配而不是检查是否相等,即'='而不是'=='。仅此一项就可以解决问题。

跳出页面的另一件事是,您显然是在动态分配每个节点,并且您的删除功能应该是在完成后删除内存。

先解决这两个,然后再看看你在哪里。