我有一张CD附加到链接列表的CD列表。我可以成功附加CD并显示它们。但是当我尝试通过仅使用CD名称作为参数来删除CD时,我得到RunTime检查错误#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;
}
答案 0 :(得分:0)
我认为在&#34;其他&#34;你应该初始化为
previousNode = head;
nodePtr = head->next;
我还注意到以下内容:
void LinkedList1<T>::deleteNode( T searchValue)
{
discList *nodePtr; // To traverse the list
discList *previousNode;
我觉得非常可疑,因为discList
应该与T
有某种关联。它应该像
Node<T> *nodePtr