
算法4.双向链表// 04_双向链表.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。//#includeiostreamusingnamespacestd;// 定义双向链表的节点类型structNode{Node(intdata0):data_(data),next_(nullptr),pre_(nullptr){}intdata_;// 数据域Node*next_;// 指向下一个节点Node*pre_;// 指向前一个节点};// 双向链表classDoubleLink{public:DoubleLink(){head_newNode();}~DoubleLink(){Node*phead_;while(p!nullptr){head_head_-next_;deletep;phead_;}}public:// 头插法voidInsertHead(intval){Node*nodenewNode(val);node-next_head_-next_;node-pre_head_;if(head_-next_!nullptr){head_-next_-pre_node;}head_-next_node;}// 尾插法voidInsertTail(intval){Node*phead_;while(p-next_!nullptr){pp-next_;}// p-尾节点Node*nodenewNode(val);node-pre_p;p-next_node;}// 节点删除voidRemove(intval){Node*phead_-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{pp-next_;}}}// 节点搜索boolFind(intval){Node*phead_-next_;while(p!nullptr){if(p-data_val){returntrue;}else{pp-next_;}}returnfalse;}// 链表节点输出voidShow(){Node*phead_-next_;while(p!nullptr){coutp-data_ ;pp-next_;}coutendl;}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();}