双链表
在单链表的基础上结点多加一个前一个结点的指针
所有在插入的时候不用遍历到链表的两端,可以直接获得
//
// Created by lingxian on 2019/9/6.
//
#include <iostream>
#include "DoubleLinkList.h"
template<typename T>
struct node{
node *preNode= nullptr;
node *next= nullptr;
T data;
};
template<typename T>
class DoubleLinkList {
node<T> *head;
node<T> *end;
~DoubleLinkList(){
node<T> *b=head;
while (b!=nullptr){
node<T> *c=b;
delete b;
b=c->next;
}
}
public:
void insertInHead(T data){
node<T> *b=head;
node<T> *a=new node<T>;
b->preNode=a;
a->data=data;
a->next=b;
head=a;
}
DoubleLinkList(){
end=head=new node<T>;
}
void insertInEnd(T data){
node<T> *b=end;
node<T> *a=new node<T>;
b->next=a;
b->data=data;
a->preNode=b;
end=a;
}
void show(){
node<T> *b=head;
while (b->next!=nullptr){
std::cout<<b->data<<" ";
b=b->next;
}
}
void showByEnd(){
node<T> *b=end;
while (b->preNode!=nullptr){
b=b->preNode;
std::cout<<b->data<<" ";
}
};
};
对于插入优化了时间复杂度,但是增加了空间复杂度