📅  最后修改于: 2023-12-03 15:10:20.654000             🧑  作者: Mango
双向链表是指在每个节点中不仅包含其后继节点的地址,还包含其前驱节点的地址。
双向链表的优点:
双向链表的缺点:
删除双向链表中的一个节点需要进行以下几个步骤:
以下是双向链表删除中间一个节点的C++代码实现:
#include<iostream>
using namespace std;
struct Node{
int data;
Node* prev;
Node* next;
Node(int x){
data = x;
prev = NULL;
next = NULL;
}
};
void deleteNode(Node* curr){
if(curr == NULL || curr->next == NULL) return; // 如果当前节点为空或下个节点为空,则无法进行删除操作
Node* prev = curr->prev;
Node* next = curr->next;
prev->next = next; // 修改前驱节点的后继指针
next->prev = prev; // 修改后继节点的前驱指针
delete curr; // 释放被删除节点的内存空间
}
int main(){
Node* head = new Node(-1);
Node* temp1 = new Node(10);
Node* temp2 = new Node(20);
Node* temp3 = new Node(30);
head->next = temp1;
temp1->prev = head;
temp1->next = temp2;
temp2->prev = temp1;
temp2->next = temp3;
temp3->prev = temp2;
cout<<"双向链表中的节点为:"<<endl;
Node* curr = head;
while(curr->next != NULL){
curr = curr->next;
cout<<curr->data<<" ";
}
cout<<endl;
deleteNode(temp2); // 删除中间的节点20
cout<<"删除节点后的双向链表中的节点为:"<<endl;
curr = head;
while(curr->next != NULL){
curr = curr->next;
cout<<curr->data<<" ";
}
cout<<endl;
return 0;
}
以上代码片段使用C++语言实现了双向链表的删除操作,输入的双向链表为{ 10 <-> 20 <-> 30 },删除中间节点20后,新双向链表为{ 10 <-> 30 }。