rambo189619 icon

Linked List

rambo189619 | PRO | 04/17/13 08:34:05 PM UTC | 0 ⭐ | 188 👁️ | Never ⏰ | []
Java |

3.6 KB

|

None

|

0 👍

/

0 👎

package es.ubu.inf.edat.pr06;
 
import java.util.AbstractList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
 
public class ListaEnlazada<E> extends AbstractList<E> {
    private List<E> lista;
    private int contador;
    private Nodo ultimo;
    private Nodo primero;
 
    public ListaEnlazada() {
        primero = null;
        ultimo = null;
        lista = new LinkedList<E>();
        contador = 0; //Variable para saber cuantas elementos hay en la lista.
    }
 
    @Override
    public E get(int arg0) {
        return lista.get(arg0);
    }
 
    @Override
    public int size() {
        return contador;
    }
 
    public boolean add(E objeto) {
        Nodo nuevo = new Nodo(objeto);
        if (lista.size() == 0) {
            primero = nuevo;
            ultimo = nuevo;
        } else {
            ultimo.setSiguiente(nuevo);
            nuevo.setSiguiente(null);
            ultimo = nuevo;
        }
        
        contador++;
        System.out.println(contador);
        return true;
    }
 
    public void add(int i, E e) {
        throw new UnsupportedOperationException();
    }
 
    public E remove(int posicion) {
        E aux = ultimo.getDato();
        Nodo aux2 = null;
 
        if (lista.size() == 0) {
            throw new UnsupportedOperationException("Lista vacia");
        } else if (primero == ultimo) {
            primero = null;
            ultimo = null;
            if (posicion < 0 || posicion >= size())
                throw new IndexOutOfBoundsException();
        } else {
            aux2 = primero;
            for (int i = 0; i < posicion; i++) {
                aux2 = aux2.getSiguiente();
                if (i == posicion - 1) {
                    aux2.setSiguiente(primero);
                    ultimo = aux2;
                }
            }
        }
 
        contador--;
        return aux;
    }
 
    public void clear() {
        primero = null;
        ultimo = null;
    }
 
    private class Nodo {
        private E dato;
        private Nodo siguiente;
 
        public Nodo(E dato) {
            this.dato = dato;
        }
 
        public E getDato() {
            return dato;
        }
 
        public void setDato(E objeto) {
            this.dato = objeto;
        }
 
        public Nodo getSiguiente() {
            return siguiente;
        }
 
        public void setSiguiente(Nodo siguiente) {
            this.siguiente = siguiente;
        }
 
    }
 
    @Override
    public Iterator<E> iterator() {
 
        return new ListIterator<E>() {
            private int contador2 = 0; //Variable para saber la posicion actual.
            private E aux = null;
            private Nodo actual = primero;
 
            @Override
            public boolean hasNext() {
                if (actual == null)
                    return false;
                else
                    return true;
            }
 
            @Override
            public E next() {
                if (contador == 0) {
                    throw new UnsupportedOperationException("Lista vacia");
                } else if (primero == ultimo) {
                    aux = lista.get(0);
                } else {
                    if (actual!=null) {
                        aux = actual.getDato();
                        actual.getSiguiente();
                    }
 
                }
 
                contador2++;
                return aux;
            }
 
            @Override
            public boolean hasPrevious() {
                if (actual == primero)
                    return false;
                else
                    return true;
            }
 
            @Override
            public int nextIndex() {
                return contador2;
            }
 
            @Override
            public E previous() {
                Nodo anterior = primero;
 
                if (lista.size() == 0) {
                    throw new UnsupportedOperationException("Lista vacia");
                } else if (primero == ultimo) {
                    aux = lista.get(0);
                } else {
                    if (contador < lista.size()) {
                        aux = actual.getDato();
                        while (anterior != actual) {
                            anterior.getSiguiente();
                        }
                        actual.setSiguiente(anterior);
                    }
 
                }
 
                contador2--;
                return aux;
            }
 
            @Override
            public int previousIndex() {
                return contador2;
            }
 
            // Métodos NO utilizados
            @Override
            public void set(E arg0) {
                throw new UnsupportedOperationException();
 
            }
 
            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
 
            @Override
            public void add(E arg0) {
                throw new UnsupportedOperationException();
            }
 
        };
    }
}

Comments