运行时链表删除函数出错



我有一个cd列表,我将它们附加到一个链表中。我可以成功地追加cd并显示它们。但是,当我试图通过仅使用CD名称作为参数来删除CD时,我得到一个运行时检查错误#3变量'previousNode'正在使用而未初始化。因此,当我将其初始化为0并调用remove函数时,程序会遇到错误并需要关闭。它建得很好。如何用正确的参数设置deleteNode ?还是deleteNode函数有问题?我需要询问用户要删除哪张cd,然后删除那张cd。如果你需要看到更多的代码,请告诉我。这是我附加到节点上的东西。CD NAME, ARTIST, LENGTH, SONG, SONG TITLE, SONG LENGTH,但我只希望用户输入CD NAME,整个节点将被删除。

删除Main中的函数

void remove_cd(LinkedList1<CD> *del)
{
    string name;        // To hold name of CD
    cout << "CD name to remove: ";
    cin.ignore();
    getline(cin, name);
    CD cd(name);
    del->deleteNode(cd);
}

链表删除函数

template <class T>
class LinkedList1 
{
private:
// Declare a structure
struct discList
{
    T value;
    struct discList *next;  // To point to the next node
};
discList *head;     // List head pointer
public:
// Default Constructor
LinkedList1()
{ head = NULL; }
// Destructor
~LinkedList1();
// Linked list operations
void appendNode(T);
void insertNode(T);
void deleteNode(T);
void displayList() const;
};
template<class T>
void LinkedList1<T>::deleteNode( T searchValue)
{
    discList *nodePtr;          // To traverse the list
    discList *previousNode;     // To point to the previous node
    // If the list is empty, do nothing
    if (!head)
        return;
    // Determine if the first node is the one
    if (head->value==searchValue)
    {
        nodePtr = head->next;
        delete head;
        head = nodePtr;
    }
    else
    {
        // Intialize nodePtr to head of list
        nodePtr = head;
        while (nodePtr != NULL && nodePtr->value != searchValue)
        {
            previousNode = nodePtr;
            nodePtr = nodePtr->next;
        }
        if (nodePtr)
        {
            previousNode->next = nodePtr->next;
            delete nodePtr;
        }
    }
}

CD中定义的重载操作符。这是问题所在吗?

bool CD::operator != (const CD &e)
{
    if (name != e.name)
        return true;
    return false;
}
bool CD::operator == (const CD &e)
{
    if (name == e.name)
        return true;
    return false;
}

我认为在else中应该初始化为

    previousNode = head;
    nodePtr = head->next;

我还注意到以下内容:

void LinkedList1<T>::deleteNode( T searchValue)
{
    discList *nodePtr;          // To traverse the list
    discList *previousNode;

这看起来很可疑,因为discList应该与T有某种联系。应该是像

这样的东西
    Node<T> *nodePtr

相关内容

  • 没有找到相关文章

最新更新