Originariamente inviato da VincenzoTheBest
Ok, però dovresti far vedere come è definita la lista su cui vuoi costruire il metodo. Leggendo il codice sembra che si tratti di una implementazione che usa le strutture collegate, però non è abbastanza per conoscere esattamente la realizzazione.
codice:
public class MiaLista {
private class ListElem {
private int dato;
private ListElem next = null;
public int getDato() {
return dato;
}
public void setDato(int dato) {
this.dato = dato;
}
public ListElem getNext() {
return next;
}
public void setNext(ListElem next) {
this.next = next;
}
public boolean equals(int val) {
return dato == val;
}
public void draw() {
System.out.print("["+ dato + "|");
if (next == null)
System.out.print("null");
else
System.out.print("next");
System.out.print("]");
}
}
private ListElem first;
public MiaLista() {
first = null;
}
public void insert(int val) {
ListElem elem = new ListElem();
elem.setDato(val);
elem.setNext(first);
first = elem;
}
public boolean delete(int val) {
boolean found = false;
if (this.isEmpty())
return false;
if (first.equals(val)) {
// L'elemento cercato e` il primo, quindi devo
// modifiare first
first = first.getNext();
found = true;
}
else {
// L'elemento cercato non e` il primo, devo modificare
// un elemento generico
ListElem iterator = first;
while ((iterator.getNext()) != null && !found)
if ((iterator.getNext()).equals(val)) {
iterator.setNext((iterator.getNext()).getNext());
found = true;
}
else
iterator = iterator.getNext();
}
return found;
}
public boolean delete_bis(int val) {
if (first.equals(val)) {
// L'elemento cercato e` il primo, quindi devo
// modifiare first
first = first.getNext();
return true;
}
else {
// L'elemento cercato non e` il primo, devo modificare
// un elemento generico
ListElem iterator = first;
while ((iterator.getNext()) != null)
if ((iterator.getNext()).equals(val)) {
iterator.setNext((iterator.getNext()).getNext());
return true;
}
else
iterator = iterator.getNext();
}
return false;
}
public boolean isEmpty() {
return first == null;
}
public boolean member(int val) {
ListElem iterator = first;
boolean found = false;
while ((iterator != null) && !found)
if (iterator.equals(val))
found = true;
else
iterator = iterator.getNext();
return found;
}
// Alternativa all'utilizzo di found
public boolean member_bis(int val) {
ListElem iterator = first;
while ((iterator != null))
if (iterator.equals(val))
return true;
else
iterator = iterator.getNext();
return false;
}
public void printList() {
ListElem iterator = first;
System.out.print("Elementi: ");
while (iterator != null) {
System.out.print(iterator.getDato() + ",");
iterator = iterator.getNext();
}
System.out.println("");
}
public void draw() {
ListElem iterator = first;
if (first == null)
System.out.print("this_MiaLista-->[|first==null|]");
else
System.out.print("this_MiaLista-->[|first|]");
while (iterator != null) {
System.out.print("-->");
iterator.draw();
iterator = iterator.getNext();
}
System.out.println("");
}
// Altri metodi un po' piu` specializzati
public void insertFirst(int val) {
insert(val);
}
public void insertLast(int val) {
ListElem elem = new ListElem();
elem.setDato(val);
if (first == null)
first = elem;
// Alternativa:
// if (isEmpty())
// insertFirst(val);
else {
ListElem iterator = first;
while (iterator.getNext() != null)
iterator = iterator.getNext();
iterator.setNext(elem);
}
}
public boolean deleteFirst() {
if (first == null)
// Alternativa:
// if (isEmpty())
return false;
else {
first = first.getNext();
return true;
}
}
public boolean deleteLast() {
if (first == null)
// Alternativa:
// if (isEmpty())
return false;
else if (first.getNext() == null) {
// Ha un solo elemento, devo modificare first!
first = first.getNext();
// Alternativa:
// first = null;
// Altra alternativa:
// deleteFirst();
return true;
}
else {
ListElem iterator = first;
while (iterator.getNext().getNext() != null)
iterator = iterator.getNext();
iterator.setNext(null);
return true;
}
}
// I due metodi successivi sono un po' problematici per
// via delle situazioni di errore che non possono essere
// segnalate coerentemente con un valore di ritorno opportuno
public int getFirstDato() {
return first.getDato();
}
public int getLastDato() {
ListElem iterator = first;
while (iterator.getNext() != null)
iterator = iterator.getNext();
return iterator.getDato();
}
}