如何删除具有负键链接的节点之前的节点

时间:2016-12-23 04:42:45

标签: c++ linked-list

作为标题,我有一个用C ++实现的链表。现在我想用负键删除任何节点前面的所有节点。我使用3个节点指针: *prevNode*currNode*nextNode遍历列表。我发现*nextNode中的密钥的任何时候都是< 0,我删除*currNode并继续直到列表末尾。删除节点时,我还会检查它是否是列表中的第一个节点。

这是我的C ++代码:

void deletePrecedingNegative(LinkedList *l){
    Node *prevNode=NULL;
    Node *currNode=l->head;
    Node *nextNode=NULL;
    while(currNode->next){
        nextNode = currNode->next;
        if(nextNode->data < 0){
            if(currNode == l->head){
                l->head = nextNode;
                delete currNode;
                currNode = nextNode;
            }
            else{
                prevNode->next = nextNode;
                delete currNode;
                currNode = nextNode;
            }
        }
        else{
            prevNode = currNode;
            currNode = nextNode;
        }
    }
}

有人有更好的解决方案吗?请告诉我。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果它正在删除保持负键的节点之前的所有节点,则表示删除保留否定键的最后一个节点之前的所有节点。

void DeleteNodesPreceedinglastNegative(LinkedList* l)
{
     Node *currNode=l->head;
     Node *tempNode=l->head;
     while(tempNode->Next)
     {
        tempNode = tempNode->Next;
        if(tempNode->Data < 0)
        {
             while(currNode != tempNode)
             {
                l->head = currNode->Next;
                delete currNode;
                currNode = l->head;
             }
        }
     }
     currNode = NULL;
     tempNode = NULL;
}