📌  相关文章
📜  用于删除链表中节点的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:11:15.839000             🧑  作者: Mango

用于删除链表中节点的 C++ 程序

本篇介绍的是一段 C++ 程序,用于在链表中删除指定的节点。该程序结合了链表的常用操作,如节点的访问、修改、删除等。

程序实现

首先,我们需要定义链表的节点结构体:

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

其中,val 表示节点的值,next 表示指向下一个节点的指针。

接下来,我们实现删除节点的函数:

ListNode* deleteNode(ListNode* head, int val) {
    if (!head) return head;
    if (head->val == val) return head->next;
    ListNode* prev = head;
    ListNode* curr = head->next;
    while (curr && curr->val != val) {
        prev = curr;
        curr = curr->next;
    }
    if (curr) {
        prev->next = curr->next;
        delete curr;
    }
    return head;
}

该函数的输入参数为链表头节点 head 和需要删除的节点值 val。程序首先特判链表为空和要删除的节点为头节点的情况,若满足任一条件,则直接返回链表头。否则,程序使用一对指针 prevcurr 同时遍历链表,直到找到要删除的节点或遍历完整个链表。若找到要删除的节点,则使用 prev 指针连接其前后节点,并释放 curr 节点内存。最后,函数返回链表头节点。

使用示例

下面是一个使用示例,展示了如何创建链表、调用删除节点函数并输出结果:

int main() {
    ListNode* head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = new ListNode(4);
    int val = 3;
    head = deleteNode(head, val);
    while (head) {
        cout << head->val << " ";
        head = head->next;
    }
    cout << endl;
    return 0;
}

本示例中,我们创建了一个包含 4 个节点的链表 [1, 2, 3, 4],并选取值为 3 的节点进行删除。程序输出结果为 1 2 4,即删除成功。