如何在带有负键的节点之前删除节点A链接列表

How to delete the node immediately preceding a node with a negative key a linked list

本文关键字:节点 删除 列表 链接      更新时间:2023-10-16

作为标题,我在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;
        }
    }
}

有人有更好的解决方案吗?请告诉我。预先感谢!

如果它删除了持有负键的节点之前的所有节点,则意味着删除所有节点,先于最后一个节点持有负键。

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;
}