Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename N> class Node{
- private:
- N key;
- Node<N> *next, *prev;
- public:
- Node(N key){
- this->key = key;
- next = prev = NULL;
- }
- int getKey() { return key; }
- Node<N>* getNext() { return next; }
- void setNext(Node<N>* next) { this->next = next; }
- Node<N>* getPrev() { return prev; }
- void setPrev(Node<N>* prev) { this->prev = prev; }
- };
- template <typename L> class List{
- private:
- Node<L>* head, *tail;
- int size;
- Node<L>* _search(L x){
- Node<L>* temp = head;
- while(temp!=NULL)
- {
- if(temp->getKey() == x)
- return temp;
- temp = temp->getNext();
- }
- return NULL;
- }
- public:
- List(){
- head = tail = NULL;
- size = 0;
- }
- int isEmpty() {
- if(!head)
- return 1;
- return 0;
- }
- int getSize() { return size; }
- int search(L x){
- if(_search(x))
- return 1;
- return 0;
- }
- List<L>* insertInHead(L x){
- Node<L>* temp = new Node<L>(x);
- size++;
- if(!head){
- head = tail = temp;
- return this;
- }
- temp->setNext(head);
- head->setPrev(temp);
- head = temp;
- return this;
- }
- List<L>* insertInTail(L x){
- if(!head){
- return insertInHead(x);
- }
- Node<L>* temp = new Node<L>(x);
- size++;
- tail->setNext(temp);
- temp->setPrev(tail);
- tail = temp;
- return this;
- }
- void del(L x){
- if(!search(x)){
- cout << "Elemento Inesistente" << endl;
- return;
- }
- size--;
- Node<L>* temp = _search(x);
- if(temp == head){
- head = temp->getNext();
- delete(temp);
- return;
- }
- Node<L>* previous = temp->getPrev();
- previous->setNext(temp->getNext());
- Node<L>* temp2 = temp->getNext();
- if(temp2)
- temp2->setPrev(previous);
- delete(temp);
- }
- void print(){
- if(isEmpty()){
- cout << "La Lista è vuota!" << endl;
- return;
- }
- Node<L>* temp = head;
- while(temp){
- cout << temp->getKey() << " ";
- temp = temp->getNext();
- }
- cout << endl;
- }
- };
- int main(){
- List<int>* T = new List<int>();
- T->insertInHead(5)->insertInTail(567)->insertInHead(6)->insertInTail(8)->insertInHead(45);
- T->print();
- T->del(6);
- T->print();
- T->del(8);
- T->print();
- T->del(5);
- T->print();
- T->del(567);
- T->print();
- T->del(45);
- T->print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement