删除链表C ++中的节点(Deleting a node in a linked list C++)
所以我很难让它工作,即使经过大量的谷歌搜索,我也无法完成它的工作。 这是我正在努力的功能:
bool deleteOneOf(const std::string & target) { Node * ptr = _first; Node * temp; while (ptr != nullptr) { if (target != ptr->_entry) { temp = ptr; ptr = ptr->_link; } else { temp->_link = ptr->_link; delete ptr->_link; return true; } } return false; }我必须使用的Node类是:
class Node { public: std::string _entry; Node * _link; Node(std::string entry, Node * link) : _entry(entry), _link(link) {} };非常感谢任何帮助,谢谢。
So I'm having a hard time getting this to work, and even after extensive googling I can't quite get it to work. Here's the function I'm working on :
bool deleteOneOf(const std::string & target) { Node * ptr = _first; Node * temp; while (ptr != nullptr) { if (target != ptr->_entry) { temp = ptr; ptr = ptr->_link; } else { temp->_link = ptr->_link; delete ptr->_link; return true; } } return false; }The Node class I have to work with is this:
class Node { public: std::string _entry; Node * _link; Node(std::string entry, Node * link) : _entry(entry), _link(link) {} };Any help is greatly appreciated, thanks.
最满意答案
你还没有初始化temp。 如果您正在查看列表中的第一个元素,它将指向垃圾。 此外,您需要删除ptr。 固定代码:
bool deleteOneOf(const std::string & target) { Node * ptr = _first; Node * temp = nullptr; while (ptr != nullptr) { if (target != ptr->_entry) { temp = ptr; ptr = ptr->_link; } else { if (temp) temp->_link = ptr->_link; else _first = ptr->_link; delete ptr; return true; } } return false; }You haven't initialized temp. If you are looking at the first element in the list, it will point to garbage. Also, you need to delete ptr. Fixed code:
bool deleteOneOf(const std::string & target) { Node * ptr = _first; Node * temp = nullptr; while (ptr != nullptr) { if (target != ptr->_entry) { temp = ptr; ptr = ptr->_link; } else { if (temp) temp->_link = ptr->_link; else _first = ptr->_link; delete ptr; return true; } } return false; }更多推荐
发布评论