📌  相关文章
📜  用于在给定位置删除链表节点的 C++ 程序(1)

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

用于在给定位置删除链表节点的 C++ 程序

删除链表节点是链表操作中非常常见的操作之一。在链表中删除节点可以用于清除不要的数据,回收内存以及改变链表的结构。这里我们介绍如何在给定位置删除链表节点的 C++ 程序。

链表基本知识

在介绍删除链表节点的方法之前,我们先来简单回顾一下链表的基本知识。

链表是一种常见的数据结构,它由一系列节点组成,每个节点都包含了一个数据元素和一个指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点。链表可以分为单向链表和双向链表两种类型。

在C++中实现链表,一般使用结构体表示节点,定义如下:

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

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

删除链表节点的方法

删除链表节点可以分为两种情况:

  • 删除链表中间节点
  • 删除链表尾节点
删除链表中间节点

假设给定一个指向要删除节点的指针 pNode,我们需要删除这个节点并使链表保持连续。我们可以直接修改链表连接关系即可,具体步骤如下:

  1. 找到要删除节点的前一个节点 pPrev
  2. 修改 pPrev 的 next 指针,使其指向要删除节点的下一个节点 pNext
  3. 删除要删除的节点

具体实现代码如下:

void DeleteNode(ListNode* pHead, ListNode* pNode) {
    if (pHead == NULL || pNode == NULL) {
        return;
    }

    if (pNode->next != NULL) { // pNode不是尾节点
        ListNode* pNext = pNode->next;
        pNode->val = pNext->val;
        pNode->next = pNext->next;
        delete pNext;
    } else if (pHead == pNode) { // pNode是唯一节点
        delete pNode;
        pHead = NULL;
    } else { // pNode是尾节点
        ListNode* pPrev = pHead;
        while (pPrev->next != pNode) {
            pPrev = pPrev->next;
        }
        pPrev->next = NULL;
        delete pNode;
    }
}
删除链表尾节点

删除链表尾节点的方法比较简单,只需要找到尾节点的前一个节点并修改其 next 指针即可。如果链表只有一个节点,则删除该节点后链表为空。

总结

删除链表节点是链表操作中非常常见的操作之一,可以用于清除不要的数据,回收内存以及改变链表的结构。删除链表节点分为删除链表中间节点和删除链表尾节点两种情况,具体实现步骤与代码如上所示。