c++实现双向链表操作

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹平华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值