算法4.双向链表
// 04_双向链表.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include<iostream>usingnamespacestd;// 定义双向链表的节点类型structNode{Node(intdata=0):data_(data),next_(nullptr),pre_(nullptr){}intdata_;// 数据域Node*next_;// 指向下一个节点Node*pre_;// 指向前一个节点};// 双向链表classDoubleLink{public:DoubleLink(){head_=newNode();}~DoubleLink(){Node*p=head_;while(p!=nullptr){head_=head_->next_;deletep;p=head_;}}public:// 头插法voidInsertHead(intval){Node*node=newNode(val);node->next_=head_->next_;node->pre_=head_;if(head_->next_!=nullptr){head_->next_->pre_=node;}head_->next_=node;}// 尾插法voidInsertTail(intval){Node*p=head_;while(p->next_!=nullptr){p=p->next_;}// p->尾节点Node*node=newNode(val);node->pre_=p;p->next_=node;}// 节点删除voidRemove(intval){Node*p=head_->next_;while(p!=nullptr){if(p->data_==val){// 删除p指向的节点p->pre_->next_=p->next_;if(p->next_!=nullptr){p->next_->pre_=p->pre_;}//Node* next = p->next_;deletep;//p = next;return;}else{p=p->next_;}}}// 节点搜索boolFind(intval){Node*p=head_->next_;while(p!=nullptr){if(p->data_==val){returntrue;}else{p=p->next_;}}returnfalse;}// 链表节点输出voidShow(){Node*p=head_->next_;while(p!=nullptr){cout<<p->data_<<" ";p=p->next_;}cout<<endl;}private:Node*head_;// 指向头节点};intmain(){DoubleLink dlink;dlink.InsertHead(100);dlink.InsertTail(20);dlink.InsertTail(12);dlink.InsertTail(78);dlink.InsertTail(32);dlink.InsertTail(7);dlink.InsertTail(90);dlink.Show();dlink.InsertHead(200);dlink.Show();dlink.Remove(200);dlink.Show();dlink.Remove(90);dlink.Show();dlink.Remove(78);dlink.Show();}