Untitled
unknown
plain_text
2 years ago
2.4 kB
5
Indexable
#ifndef LIST_H #define LIST_H #include "Node.hpp" template <typename T> class List { private: Node<T>* head; Node<T>* tail; int size; public: // Construtor List() { head = nullptr; tail = nullptr; size = 0; } // Retorna se a lista está vazia ou não. bool isEmpty() { return (size == 0); } // Retorna o tamanho da lista. int getSize() { return size; } // Insere um elemento no final da lista void push_back(T data) { // Cria um novo nó com o elemento Node<T>* new_node = new Node<T>(data); // Se a lista estiver vazia, o elemento adicionado sera tanto o primeiro (head) // quanto o ultimo (tail) elemento da lista. if (head == nullptr) { head = new_node; tail = new_node; } else { // Se não estiver vazia, o próximo elemento do antigo último elemento // sera o elemento adicionado. tail->setNext(new_node); // O elemento adicionado é o ultimo elemento da lista agora. tail = new_node; } // A lista tem mais um elemento. size++; } // Retorna o nó que estiver no índice informado Node<T>* at(int index) { // Se o índice for menor que zero, ou igual ou maior que o tamanho da lista if (index < 0 || index >= size) { // Retorna um erro (out_of_range) throw out_of_range("Esse indice nao existe na lista."); } // Pega a cabeça (Head) da lista Node<T>* current = head; // Vai "Passando pra frente" até chegar no nó do índice desejado for (int i = 0; i < index; i++) { current = current->getNext(); } return current; } void removeAt(int index) { // Se o índice for menor que zero, ou igual ou maior que o tamanho da lista if (index < 0 || index >= size) { // Retorna um erro (out_of_range) throw out_of_range("Esse indice nao existe na lista."); } // Pega o nó do elemento que sera removido Node<T>* current = this->at(index); // Se o elemento for a cabeça (Head) da lista if (current == head) { Node<T>* temp = head; head = head->getNext(); delete temp; size--; if (head == nullptr) { tail = nullptr; } } } }; #endif
Editor is loading...