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;
}
總結
以上是生活随笔為你收集整理的c++实现双向链表操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一次较为完整的原生JavaScript
- 下一篇: 在maven本地仓库导入jar包