Skip to content

Instantly share code, notes, and snippets.

@feraranas
Created March 10, 2022 02:59
Show Gist options
  • Select an option

  • Save feraranas/7bf7922d3fd0bba5830f8fd21c4d3ff6 to your computer and use it in GitHub Desktop.

Select an option

Save feraranas/7bf7922d3fd0bba5830f8fd21c4d3ff6 to your computer and use it in GitHub Desktop.

Revisions

  1. feraranas created this gist Mar 10, 2022.
    71 changes: 71 additions & 0 deletions DoubleLinkedList.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    template <typename T>
    class Node
    {
    private:
    T data;
    Node<T> *next;
    Node<T> *previous;
    template <typename U>
    friend class DoubleLinkedList;

    public:
    Node(T data)
    {
    this->data = data;
    next = NULL;
    previous = NULL;
    }
    };

    template <typename T>
    class DoubleLinkedList
    {
    private:
    Node<T> *Head;
    Node<T> *Tail;

    public:
    DoubleLinkedList()
    {
    Head = Tail = NULL;
    }

    // Agrega al Tail de la lista ligada (FIFO)
    void enqueue(T data)
    {
    Node<T> *newest = new Node<T>(data);
    if (Head == NULL)
    {
    Head = Tail = newest;
    }
    else
    {
    Tail->next = newest;
    newest->previous = Tail;
    Tail = newest;
    }
    }

    T dequeue()
    {
    if (Head == NULL)
    {
    throw -1;
    }
    else if (Head == Tail)
    {
    T data = Head->data;
    delete Head;
    Head = Tail = NULL;
    return data;
    }
    else
    {
    T data = Head->data;
    Head = Head->next;
    delete Head->previous;
    Head->previous = NULL;
    return data;
    }
    }
    };