/** * * Title: Studio di implementazioni dell'adt Lista

* Description: Implementazione della lista mediante uso implicito dei puntatori

* Copyright: Copyright (c) Roberto Posenato

* Company: Università degli Studi di Verona

* @author Roberto Posenato * @version 1.0 * */ //package Lista; public class ListaLink implements Lista { private class Node {/*nodo della lista: deve contenere l'elemento *e l'indirizzo del successivo */ Object key; Node next; Node(Object u) { key = u; next = null; } } private Node head; //inzio della lista private int nOggetti;//supporto public ListaLink() { head = null; nOggetti = 0; } public boolean eVuota() { return head == null; } public int lunghezza() { //si risparmia un sacco di tempo return nOggetti; } public void cancella(int k) throws IllegalArgumentException { // 0<=k= nOggetti)) throw new IllegalArgumentException(); else { if (nOggetti == 1) {//e' l'unico elemento head = null; } else { if (k == 0) {//e' il primo elemento head = head.next; } else {// e' un elemento generico Node indice = head; for (int i=0 ; i < k-1; i++)//cerco il nodo con posizione prima di quello da cancellare indice = indice.next; indice.next= indice.next.next;//cancello } } nOggetti--; } } public Object elemento(int k) throws IllegalArgumentException { // 0<=k=nOggetti) throw new IllegalArgumentException(); else { Node indice = head; for (int i=0 ; i < k; i++) indice = indice.next; return indice.key; } } public void inserisci(int k, Object u) throws IllegalArgumentException { // 0<=knOggetti) throw new IllegalArgumentException(); else { Node nuovo = new Node(u); if (nOggetti == 0) {//e' il primo elemento da inserire head = nuovo; } else { if (k==0) { //è da inserire in testa nuovo.next = head; head = nuovo; } else { Node indice = head; for (int i=0 ; i < k-1; i++) //posizionati nell'elemento precedente a quello da inserire indice = indice.next; nuovo.next = indice.next; //al nuovo attacco il resto della lista indice.next = nuovo; //all'elemento precedente attacco il nuovo } } nOggetti++; } } }