删除LinkedList中的前端元素会产生垃圾

时间:2015-11-25 10:24:57

标签: c++ linked-list

这是代码:

void deleteNodebyValue(struct Node *head, int data){
    Node *cur = head;
    Node *prevNode = head;
    while(cur){

        if(cur->data == data){
            //cout << "if(cur->data == data)" << endl;
            if(cur == head){
                cout <<"if(cur == head)" << endl;
                //head = cur->next;
                return;

            } else{
                prevNode->next = cur->next;

            }

            delete cur;
            return;

        }

        prevNode = cur;
        cur = cur->next;
    }
}

它适用于任何节点,但前端(第一个/头部)节点。 如果我尝试删除第一个节点,它会产生垃圾:(。

1 个答案:

答案 0 :(得分:1)

您尝试修改函数中head点的位置,问题是您通过值传递head ,这意味着指针已被复制并且在函数中只在本地修改副本。您需要通过引用传递head指针:

void deleteNodebyValue(struct Node *&head, int data){...}

当然,在这种情况下你无法直接返回,你仍然需要实际删除节点。