#include
struct node
{
node* pre{};
node* next{};
int data;
};
//双链表创建结点
void create_node(node** header,int value) {
node* current = header;
if (current == nullptr){
node ptr = new node;
ptr->data = value;
header = ptr;
}else {
while (current != nullptr){
if (current->next ==nullptr){
node ptr = new node;
ptr->data = value;
ptr->pre = current;
current->next = ptr;
break;
}
current = current->next;
}
}
}
//双链表删除
void delete_list(node** header,int value){
node* current = header;
if (current == nullptr){
return;
}
while (current!= nullptr){
if (current->data == value){
node delete_ptr = current;
//第一个节点
if (current->pre == nullptr){
current = current->next;
current->pre = nullptr;
header = current;
}else {
if (current->next != nullptr) {
current->next->pre = current->pre;
}
if (current->pre != nullptr) {
current->pre->next = current->next;
}
}
delete_ptr->next = nullptr;
delete_ptr->pre = nullptr;
delete delete_ptr;
delete_ptr = nullptr;
break;
}
current = current->next;
}
}
//双链表前插入法
void insert_list_front(node* header,int value, int new_value) {
node* current = header;
if (current == nullptr){
return;
}
while (current != nullptr){
if (current->data ==value){
node temp_ptr = new node;
temp_ptr->data = new_value;
if (current->pre!= nullptr){
temp_ptr->pre = current->pre;//前一个结点,要等于插入的前结点
current->pre->next = temp_ptr;//前一结点的后结点,要等于插入结点
current->pre = temp_ptr;//当前的前一结点等于插入结点
temp_ptr->next = current;//当前的后结点等于当前结点
}else {
current->pre = temp_ptr;
temp_ptr->next = current;
header = temp_ptr;
}
break;
}
current = current->next;
}
}
//双向链表反转
void revert_double_list(node* header) {
node* cur = header;
node pre = nullptr;
while (cur != nullptr){
node* tmp = cur->next;
cur->next = pre;
cur->pre = tmp;
if (tmp!= nullptr){
tmp->pre = pre;
}
pre = cur;
cur = tmp;
}
header = pre;
}
//双链表后插入法
void insert_list_back(node* header, int value, int new_value) {
node* current = header;
if (current == nullptr){
return;
}
while (current != nullptr){
if (current->data == value){
node temp_ptr = new node;
temp_ptr->data = new_value;
if (current->next != nullptr){
temp_ptr->next = current->next;
current->next->pre = temp_ptr;
current->next = temp_ptr;
}else {
current->next = temp_ptr;
}
temp_ptr->pre = current;
break;
}
current = current->next;
}
}
int main()
{
node* header = nullptr;
for (int i =0;i<6;++i){
create_node(&header, i);
}
insert_list_back(&header, 5, 6);
//insert_list_front(&header, 0, 7);
//删除双链表的结点
//delete_list(&header, 3);
//delete_list(&header, 5);
//delete_list(&header, 1);
//delete_list(&header, 0);
int i = 100;
}