为什么我不能删除我的节点和参考

why i cannot delete my node with reference

本文关键字:节点 参考 我的 删除 不能 为什么      更新时间:2023-10-16
void deleteElement(LinkedListElement<char> *&pending)
{
    if (pending->Next) {
        char value = pending->Next->Data;
        pending->Data = value;
        LinkedListElement<char> *temp = pending->Next;
        pending->Next = pending->Next->Next;
        delete temp;
    }else{
        delete pending;
        pending = NULL;
    }
}
LinkedListElement<char> *l1 = new LinkedListElement<char>('a');
LinkedListElement<char> *l2 = new LinkedListElement<char>('b');
LinkedListElement<char> *l3 = new LinkedListElement<char>('a');
LinkedListElement<char> *l4 = new LinkedListElement<char>('c');
l1->setNext(l2); l2->setNext(l3); l3->setNext(l4);
printLinkedList(l1);
deleteElement(l4);
printLinkedList(l1);

简单棘手的删除节点 C++ 我想问的是 else 语句,如果链表是 end ,所以我可以删除 end 本身。

但两者的打印功能,将始终打印ABAC,第二种方式ABAC。因为我只是传递带有引用的参数,(&),我想如果我想删除 L4我不需要更改 l3->Next,因为我可以将 l4 更改为 NULL,而 l3->Next 将为 NULL。

我尝试使用

delete pending; pending=NULL;

为什么它不起作用,两个打印功能始终打印ABAC

delete l4,但你永远不会改变l3,它指向l4的内存(现已删除),其中仍然包含数据('c')

你需要

l3->setNext(NULL);

从列表中删除元素(当然,您仍然必须将其删除)

要使用 deleteElement 函数,您需要更改它以循环访问列表(伪代码):

void deleteElement( Element head , Element toBeDeleted)
{
    //are we deleting head (the first element of the list?) 
    //yes then head should be nulled, and delete as normal
    current = head ; ancestor = head;
    //scan through list (current becomes current->next until no more)
    //until we find toBeDeleted
    //maintain ancestor as we go 
    //if found set ancestor->next to current->next
    //delete toBeDeleted
}