正在努力更好地理解链表行为。我觉得这种逻辑是正确的,但我只是没有得到正在发生的事情。当我点击我的主要点时,程序正在破坏,我将从列表中删除一个节点。现在它破了," exe"我的Release文件夹(VS2013)中的文件现在丢失了,我无法运行程序进行调试。 IDK在那里发生了什么,我不知道为什么这不起作用。任何帮助都会很棒!
当我运行它时,它会挂起list1.remove(NODE_TO_REMOVE),现在我的调试器无法运行该程序。
LinkedList.h:
class LinkedList
{
protected:
struct ListNode
{
double value;
ListNode *next;
ListNode(double value1, ListNode *next1 = NULL)
{
value = value1;
next = next1;
}
};
ListNode *head;
public:
// Class Constructor(s)
LinkedList() { head = NULL; }
LinkedList(const LinkedList &);
void add(double x);
void print() const;
void LinkedList::remove(double value);
private:
};
LinkedList.cpp:
// Copy Constructor
LinkedList::LinkedList(const LinkedList &object)
{
head = object.head;
}
void LinkedList::add(double x)
{
if (head == NULL)
head = new ListNode(x);
else
{
ListNode *nodePtr = head;
while (nodePtr->next != NULL)
nodePtr = nodePtr->next;
nodePtr->next = new ListNode(x);
}
}
void LinkedList::print() const
{
ListNode *nodePtr = head;
while (nodePtr)
{
std::cout << nodePtr->value << ", ";
nodePtr = nodePtr->next;
}
}
void LinkedList::remove(double value)
{
ListNode *nodePtr = head;
ListNode *ptrDel = NULL;
ptrDel = nodePtr;
while (ptrDel != NULL)
{
if (nodePtr->value == value)
{
ptrDel = nodePtr;
nodePtr = ptrDel->next;
delete ptrDel;
break;
}
}
}
主:
int main()
{
const double NODE_TO_REMOVE = 15.23;
const double LIST1_NODES[] = { 67.5, -7.8, NODE_TO_REMOVE, 98.76, -19.45 };
const double NONEXISTENT_NODE = 45.76;
const int SIZE = sizeof(LIST1_NODES) / sizeof(LIST1_NODES[0]);
LinkedList list1;
LinkedList list3;
LinkedList list4;
for (int index = 0; index < SIZE; ++index)
list1.add(LIST1_NODES[index]);
cout << " \"list1\" original: ";
list1.print();
//copy constructor test
LinkedList list2(list1);
cout << " \"list2\" original: ";
list2.print();
// node removal test:
list1.remove(NODE_TO_REMOVE);
cout << "\n \"list1\" modified: ";
list1.print();
cout << "\n \"list2\" unchanged: ";
list2.print();
cout << endl;
system("pause");
return 0;
答案 0 :(得分:1)
一般来说,如果要删除链接列表中的节点,首先要查找它。假设您要删除该节点中的data
,算法为:
head
data
next
指向持有data
的{{1}} next
注意:当数据位于data
本身时,您会遇到一种特殊情况。
在 C ++ 中,这可以在下面的代码中完成:
head