【问题标题】:I'm trying to delete a node from list with the least value, but i have problems with rebuilding a link between nodes我正在尝试从列表中删除一个具有最小值的节点,但是我在重建节点之间的链接时遇到了问题
【发布时间】:2021-07-18 12:08:03
【问题描述】:

正如我所说,我想从具有最小值的列表节点中删除,为此我有第二个函数(有效),它只返回一个 int,它是列表中的最小节点值。我将此 int 传递给应该搜索该值的列表并删除包含它的节点的函数,但是我在重建前一个值和下一个值之间的链接时遇到问题(来自已删除节点的前一个和下一个节点)。我知道这是问题所在,因为当我尝试显示列表时,我得到了一些垃圾值。我做错了什么或者我应该添加什么来正确重建这些列表节点之间的链接?

简而言之边缘类

class Edge
{
private:

    int _StartVertice;
    int _EndVertice;
    int _weight;
    Edge* _NextEdge;

public:

    Edge() :_StartVertice(0), _EndVertice(0), _weight(0), _NextEdge(nullptr) {};
  
    const int& get_Weight() const { return _weight; };

    Edge* get_NextEdge() { return _NextEdge; };

    void set_NextEdge(Edge* NextEdge) { _NextEdge = new Edge;  _NextEdge = NextEdge; };
};

List 中 head 是 Edge 类型的函数

  void Edge_List::Delete_Minimal_Weight_Edge(int min_weight)
            {
            Edge* tmp = new Edge;
            tmp = head;
            Edge* prev = head;
        
        
                while (tmp->get_NextEdge()->get_Weight() != min_weight)
                {   
                        prev = tmp;
                        tmp = tmp->get_NextEdge();      
                }
        
                prev = tmp;
                tmp = tmp->get_NextEdge();
        
                prev->set_NextEdge(tmp);
                
                delete tmp;
        
            }

【问题讨论】:

    标签: c++ list


    【解决方案1】:

    循环在我要删除的节点之前结束一次迭代,因此我必须再迭代一次 prev 和 tmp 节点,然后需要使用 tmp 中的下一个节点重建链接,因此迭代到下一个节点是一次再次需要。

    void Edge_List::Delete_Minimal_Weight_Edge(int min_weight)
    {
        Edge* tmp = new Edge;
        tmp = head;
        Edge* prev = head;
    
    
        while (tmp->get_NextEdge() != nullptr && tmp->get_NextEdge()->get_Weight() <= min_weight)
        {
            prev = tmp;
            tmp = tmp->get_NextEdge();
        }
        prev = tmp;
        tmp = tmp->get_NextEdge();
    
        prev->set_NextEdge(tmp->get_NextEdge());
    
        delete tmp;
    }
    

    【讨论】:

    • 试试上面的解决方案
    • 没用,但我找到了解决办法,不过还是谢谢你的帮助^^
    • 我发布了解决方案
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多