使用C 在范围x1和x2中删除值的节点

Deleting Nodes of values in range x1 and x2 using C++

本文关键字:删除 节点 x2 范围 x1 使用      更新时间:2023-10-16

我正在尝试实现一个函数 DeleteNodes(T & val1, T & val2),该函数在范围内删除值的节点。当我运行程序时,会出现未经治疗的异常错误。我无法弄清楚我在实施中做错了什么。我使用的称为DeleteNode(T &val)的定义函数删除所需的节点。谁能帮助我解决这种情况?

void DLList<T>::DeleteNodes(T & val1 ,T & val2)
{
    if(IsEmpty())
        return;
    if(head == tail)
    {
        if(head->val >= val1 && head->val <= val2)
            DeleteHead();
    }
    DLLNode <T> *p;
    for(p = head ; p != NULL ; p  = p->next)
    {
        if(p->val >= val1 && p->val <= val2)
        {   T x = p->val;  
            DeleteNode(x);
        }   
    }
}

对不起,这是我第一次提出这种类型的问题,我必须更具体,因为deletenode(t&amp; val)功能只是删除它一个所需的节点,对于deletenodes(t&amp; val1,t&amp; val2)函数,它删除了在val1和val2之间具有范围的所有节点,以下是deletenode()函数:

bool DLList<T>::DeleteNode(T& val) 
{
bool found = false;
if(IsEmpty() == true)
    return false;
if(val == head->val)
{
    DeleteHead();
    return true;
}
if(val == tail->val)
{
    DeleteTail();
    return true;
}
DLLNode<T> *node, *predNode, *succNode;
node = predNode = succNode = NULL;
//Traverse list to find the node to be deleted
for(node = head->next; node != NULL; node = node->next)
{
    if(node->val == val)
    {
        found = true;
        break;
    }
}
if(found == true)
{
    // Unlink deleted node from list
    predNode = node->prev;
    succNode = node->next;
    predNode->next = node->next; 
    succNode->prev = node->prev;
    delete node;
}
return found;
}