在C ++中删除LinkedList中的节点指针

时间:2015-11-20 09:41:28

标签: c++ pointers linked-list

今天我正在尝试删除LinkedList中的节点实现,并且会出现此问题。这是我的LinkedList.h文件:

#pragma once
template <class Data>
class Node
{
public:
    Node();
    Node(Data newData, Node<Data>* newNext);
    ~Node();
    Node<Data>* next;
    Data data;
};


template<class Data>
class LinkedList
{
public:
    LinkedList();
    ~LinkedList();
    int size();
    bool put(Data data,int pos);
    bool del(int pos);
    void show();

private:
    typedef Node<Data>* nodePtr;
    nodePtr head;
    int N;
    bool isEmpty();
    nodePtr getPosition(int pos);
};

然后我的LinkedList.cpp文件:

#include <iostream>
#include "LinkedList.h"

using namespace std;

template<class Data>
Node<Data>::Node() {
    next = NULL;
}

template<class Data>
Node<Data>::Node(Data newData, Node * newNext)
{
    data = newData;
    next = newNext;
}

template<class Data>
Node<Data>::~Node()
{
    delete next;
}


template<class Data>
LinkedList<Data>::LinkedList() {
    head = NULL;
    N = 0;
}

template<class Data>
LinkedList<Data>::~LinkedList()
{
    delete head;
}

template<class Data>
int LinkedList<Data>::size()
{
    return N;
}

template<class Data>
bool LinkedList<Data>::isEmpty()
{
    return N == 0;
}

template<class Data>
Node<Data>* LinkedList<Data>::getPosition(int pos)
{
    nodePtr temp = head;
    if (pos > N-1) pos = N-1;
    for (int i = 0; i < pos; i++)
        temp = temp->next;
    return temp;
}

template<class Data>
bool LinkedList<Data>::put(Data data, int pos)
{
    nodePtr add;
    if (pos == 0) {
        add = new Node<Data>(data, head);
        head = add;
    }
    else{
        nodePtr pPre = getPosition(pos-1);
        nodePtr pCur = pPre->next;
        add = new Node<Data>(data, pCur);
        pPre->next = add;
    }
    N++;
    return true;
}

template<class Data>
bool LinkedList<Data>::del(int pos)
{
    if (isEmpty()) return false;
    if (pos == 0) {
        nodePtr pTemp = head;
        head = head->next;
        delete pTemp; //error
    }
    else {
        nodePtr pPre = getPosition(pos - 1);
        nodePtr pCur = pPre->next;
        pPre->next = pCur->next;
        delete pCur; //error
    }
    N--;
    return true;
}

template<class Data>
void LinkedList<Data>::show()
{
    for (nodePtr pTemp = head; pTemp != NULL; pTemp = pTemp->next)
        cout << pTemp->data;
}

void main() {
    LinkedList<int> list;
    list.put(0, 0);
    list.put(1, 0);
    list.put(2, 0);
    list.put(3, 0);
    list.put(4, 0);
    list.del(0);
    list.show();
}

如果我对这些行进行评论(但我认为它会导致内存泄漏),该程序是有效的,如果我让这些行在那里导致&#34;程序已经停止工作&#34;和控制台窗口中的随机数。 那么你们可以帮我解决一下如何正确删除这些指针吗? 对不起以前的含糊问题。 抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

哦,我只是解决了我的错误。因为我的~Node()方法在这里:

template<class Data>
Node<Data>::~Node()
{
    delete next;
}

所以当我删除一个Node时,它会删除它连接的所有指针,导致该错误。无论如何,谢谢你的帮助。