// ----------------------------------------------------------- // Estruturas de Dados 2019/2020 (CC1007) - DCC/FCUP // http://www.dcc.fc.up.pt/~pribeiro/aulas/edados1920/ // ----------------------------------------------------------- // Lista ligada simples // Ultima alteracao: 03/04/2018 // ----------------------------------------------------------- public class SinglyLinkedList { private Node first; // Primeiro no da lista private int size; // Tamanho da lista // Construtor (cria lista vazia) SinglyLinkedList() { first = null; size = 0; } // Retorna o tamanho da lista public int size() { return size; } // Devolve true se a lista estiver vazia ou falso caso contrario public boolean isEmpty() { return (size == 0); } // Adiciona v ao inicio da lista public void addFirst(T v) { Node newNode = new Node(v, first); first = newNode; size++; } // Adiciona v ao final da lista public void addLast(T v) { Node newNode = new Node(v, null); if (isEmpty()) { first = newNode; } else { Node cur = first; while (cur.getNext() != null) cur = cur.getNext(); cur.setNext(newNode); } size++; } // Retorna o primeiro valor da lista (ou null se a lista for vazia) public T getFirst() { if (isEmpty()) return null; return first.getValue(); } // Retorna o ultimo valor da lista (ou null se a lista for vazia) public T getLast() { if (isEmpty()) return null; Node cur = first; while (cur.getNext() != null) cur = cur.getNext(); return cur.getValue(); } // Remove o primeiro elemento da lista (se for vazia nao faz nada) public void removeFirst() { if (isEmpty()) return; first = first.getNext(); size--; } // Remove o ultimo elemento da lista (se for vazia nao faz nada) public void removeLast() { if (isEmpty()) return; if (size == 1) { first = null; } else { // Ciclo com for e uso de de size para mostrar alternativa ao while Node cur = first; for (int i=0; i cur = first; while (cur != null) { str += cur.getValue(); cur = cur.getNext(); if (cur != null) str += ","; } str += "}"; return str; } }