代码1
#include <iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
struct Node
{
Node(int data = 0)
:data_(data),
next_(nullptr),
pre_(nullptr)
{};
int data_;
Node* next_;//指向下一个
Node* pre_;//指向前一个
};
class doubleLink
{
public:
doubleLink()
{
head_ = new Node();
}
~doubleLink()
{
Node* p = head_;
while (p != nullptr)
{
head_ = head_->next_;
delete p;
p = head_;
}
}
public:
//头插法
void insertHead(int val)
{
Node* node = new Node(val);
node->next_ = head_->next_;
if (head_->next_ != nullptr)
{
head_->next_->pre_ = node;
}
head_->next_ = node;
node->pre_ = head_;
}
//尾插法
void insertTail(int val)
{
Node* node = new Node(val);
Node* p = head_;
while (p->next_ != nullptr)
{
p = p->next_;
}
p->next_ = node;
node->pre_ = p;
}
//结点删除
void removeall(int val)
{
Node* p = head_->next_;
while (p!=nullptr)
{
if (p->data_ == val)
{
Node* q = p->pre_;
q->next_ = p->next_;
if (p->next_ != nullptr)
{
p->next_->pre_ = q;
}
delete p;
p = q->next_;
}
else
{
p = p->next_;
}
}
}
//结点搜索
bool find(int val)
{
Node* p = head_->next_;
while (p != nullptr)
{
if (p->data_ == val)
{
return true;
}
else
{
p = p->next_;
}
}
return false;
}
//链表打印
void show()
{
Node* p = head_->next_;
while (p != nullptr)
{
cout << p->data_ << " ";
p = p->next_;
}
cout << endl;
}
private:
Node* head_;
};
int main()
{
doubleLink dlink;
dlink.show();
dlink.insertTail(1);
dlink.insertTail(2);
dlink.insertTail(3);
dlink.insertTail(4);
dlink.insertTail(5);
dlink.show();
dlink.insertTail(100);
dlink.insertHead(100);
dlink.insertHead(100);
dlink.show();
dlink.removeall(100);
dlink.removeall(3);
dlink.show();
cout << dlink.find(100) << endl;
return 0;
}
代码2
#include <iostream>
using namespace std;
#include<time.h>
#include<stdlib.h>
struct Node
{
Node(int data = 0)
:data_(data),
next_(nullptr),
pre_(nullptr)
{};
int data_;
Node* next_;//指向下一个
Node* pre_;//指向前一个
};
class doubleCircleLink
{
public:
doubleCircleLink()
{
head_ = new Node();
head_->next_ = head_;
head_->pre_ = head_;
}
~doubleCircleLink()
{
Node* p = head_->next_;
while (p != head_)
{
head_->next_ = p->next_;
p->next_->pre_ = head_;//循环里没有结点的地址域为空
delete p;
p = head_->next_;
}
delete head_;
head_ = nullptr;
}
public:
//头插法
void insertHead(int val)
{
Node* node = new Node(val);
node->next_ = head_->next_;
head_->next_->pre_ = node;
head_->next_ = node;
node->pre_ = head_;
}
//尾插法
void insertTail(int val)
{
Node* node = new Node(val);
Node* p = head_->pre_;
node->next_ = head_;
node->pre_ = p;
head_->pre_ = node;
p->next_ = node;
}
//结点删除
void removeall(int val)
{
Node* p = head_->next_;
while (p!=head_)
{
if (p->data_ == val)
{
Node* q = p->pre_;
q->next_ = p->next_;
p->next_->pre_ = q;
delete p;
p = q->next_;
}
else
{
p = p->next_;
}
}
}
//结点搜索
bool find(int val)
{
Node* p = head_->next_;
while (p != head_)
{
if (p->data_ == val)
{
return true;
}
else
{
p = p->next_;
}
}
return false;
}
//链表打印
void show()
{
Node* p = head_->next_;
while (p != head_)
{
cout << p->data_ << " ";
p = p->next_;
}
cout << endl;
}
private:
Node* head_;
Node* tail_;
};
int main()
{
doubleCircleLink dlink;
dlink.show();
dlink.insertTail(1);
dlink.insertTail(2);
dlink.insertTail(3);
dlink.insertTail(4);
dlink.insertTail(5);
dlink.show();
dlink.insertTail(100);
dlink.insertHead(100);
dlink.insertHead(100);
dlink.show();
dlink.removeall(100);
dlink.removeall(3);
dlink.show();
cout << dlink.find(100) << endl;
return 0;
}