📅  最后修改于: 2023-12-03 15:27:10.745000             🧑  作者: Mango
删除链表节点是链表操作中非常常见的操作之一。在链表中删除节点可以用于清除不要的数据,回收内存以及改变链表的结构。这里我们介绍如何在给定位置删除链表节点的 C++ 程序。
在介绍删除链表节点的方法之前,我们先来简单回顾一下链表的基本知识。
链表是一种常见的数据结构,它由一系列节点组成,每个节点都包含了一个数据元素和一个指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点。链表可以分为单向链表和双向链表两种类型。
在C++中实现链表,一般使用结构体表示节点,定义如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
其中 val 变量表示节点的数据值,next指针指向下一个节点。
删除链表节点可以分为两种情况:
假设给定一个指向要删除节点的指针 pNode,我们需要删除这个节点并使链表保持连续。我们可以直接修改链表连接关系即可,具体步骤如下:
具体实现代码如下:
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 指针即可。如果链表只有一个节点,则删除该节点后链表为空。
删除链表节点是链表操作中非常常见的操作之一,可以用于清除不要的数据,回收内存以及改变链表的结构。删除链表节点分为删除链表中间节点和删除链表尾节点两种情况,具体实现步骤与代码如上所示。