struct DoubleListNode
{
int data;
DoubleListNode* prev;
DoubleListNode* next;
DoubleListNode(int val);
};
class DoubleList
{
public:
DoubleListNode* dummy;
public:
DoubleList();
~DoubleList();
public:
void add(int);
void remove(int);
DoubleListNode* find(int);
};
#include<iostream>
#include "DoubleList.h"
DoubleListNode::DoubleListNode(int val):data(val),prev(nullptr),next(nullptr){}
DoubleList::DoubleList():dummy(new DoubleListNode(-1)){
dummy->prev = nullptr;
dummy->next = nullptr;
}
DoubleList::~DoubleList(){
auto ptr = dummy->next;
while (ptr)
{
auto temp = ptr;
ptr = ptr->next;
delete temp;
std::cout<<"Element Deleted!"<<std::endl;
}
delete dummy;
std::cout<<"DoubleList destoryed!"<<std::endl;
}
void DoubleList::add(int val){
auto ptr = find(val);
if(ptr){
std::cerr << val <<"exists, add failed!" <<std::endl;
}else{
auto temp = new DoubleListNode(val);
temp->next = dummy->next;
temp->prev = dummy;
if(dummy->next){
dummy->next->prev = temp;
}
dummy->next = temp;
}
}
void DoubleList::remove(int val){
auto ptr = find(val);
if(ptr == nullptr){
std::cerr<<val<<"does not exist, remove failed!. "<<std::endl;
}else{
if(ptr->next){
ptr->next->prev = ptr->prev;
}
ptr->prev->next = ptr->next;
delete ptr;
}
}
DoubleListNode* DoubleList::find(int val){
auto temp = dummy->next;
while(temp){
if(temp->data == val){
return temp;
}
temp = temp->next;
}
return nullptr;
}
int main(void) {
DoubleList list;
list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(4);
list.remove(0);
list.remove(2);
list.remove(4);
list.remove(4);
for (auto temp = list.dummy->next; temp; temp = temp->next)
std::cout << temp->data << " ";
std::cout << std::endl;
return 0;
}