Skip to content

单链表删除某个节点之后,这个节点还存在 #513

@yangxin6

Description

@yangxin6

大佬,问下我创建完一个单链表之后,删除一个节点,但是该节点还存在在内存中,不知道为啥
下面是我的代码

// 单链表节点
struct listNode {
    int value;
    struct listNode *next;
};
// 带头节点的单链表 长度len记录在头结点的value中
listNode *linkedListCreate(int len) {
    listNode *head = new listNode{len, nullptr};
    listNode *p = head;
    for (int i = 1; i <= len; ++i) {
        p->next = new listNode{i, nullptr};
        p = p->next;
    }
    return head;
}
// 删除(删除要先找到该节点的前前驱结点, 不能删除头结点)
void del(listNode *head, listNode *elem) {
    if (!elem || !head)
        return;
    listNode *pre = head->next;
    while (pre->next->value != elem->value) {
        pre = pre->next;
    }
    pre->next = elem->next;
    elem->next = nullptr;
    head->value--;
    delete elem;
}
// 找到 value 的节点,并返回对应节点的地址
listNode *find(listNode *head, int value) {
    listNode *p = head->next;
    while (p) {
        if (p->value == value)
            break;
        p = p->next;
    }
    if (p == nullptr) {
        std::cout << "改节点不存在与链表中" << std::endl;
        return nullptr;
    }
    return p;
}
int main() {
// 创建链表
    listNode *list = linkedListCreate(6);
// 删除
    listNode *node3 = find(list, 3);
    del(list, node3);
    std::cout << "地址:" << node3 << " value:" << node3->value << std::endl;
    // 打印结果: 地址:0x7fe9b5604740 value:3
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions