moka
09-07-2008, 15:15
devo fare un esercizio in preparazione di un esame universitario, ma non riesco a uscirne fuori :cry: qualcuno saprebbe aiutarmi? :oink:
la cosa da cui proprio non riesco a cavarmi fuori è come fare a puntare ciclicamente all' elemento next, dovendo passare per head :muro: è una cosa difficile da spiegare copio l'esercizio faccio prima :D
questa è la classe:
public class ListLinked {
private Node head;
private class Node {
private String content;
private Node next;
public Node(String c, Node n) {
content = c;
next = n;
}
public Node(String c) { this(c, null); }
}
public ListLinked() {
head = null;
}
public boolean isEmpty() { return head == null; }
public void addToStart(String s) {
Node newNode = new Node(s, head);
head = newNode;
}
public static ListLinked cons(String c, ListLinked l) {
ListLinked result = new ListLinked();
result.addToStart(c);
if (l != null) result.head.next = l.head;
return result;
}
public String first() { return isEmpty() ? null : head.content; }
public ListLinked rest() {
if (isEmpty()) {
return null;
}
else {
ListLinked result = new ListLinked();
result.head = head.next;
return result;
}
}
public ListLinked concatenate(ListLinked l) {
if (isEmpty()) {
return l;
}
else {
return cons(first(), rest().concatenate(l));
}
}
public int printLength = 5;
public int setPrintLength(int pl) { return printLength = pl; }
public int getPrintLength() { return printLength; }
public String toString() {
String result;
if (isEmpty()) {
return "()";
}
else {
int i;
Node n;
result = "(" + head.content;
for (n = head.next, i = 1;
n != null || (printLength > 0 && i > printLength);
n = n.next, i++) {
result += " " + n.content;
}
if (printLength > 0 && i > printLength) result += "...";
result += ")";
return result;
}
}
public static void main(String[] args) {
ListLinked l = cons("A", cons("B", cons("C", null)));
System.out.println(l);
}
}
questi i metodi da implementare:
public ListLinked reverse(); // Inverte una lista
public ListLinked remove(String s); // Crea una nuova lista con 's' rimosso.
public ListLinked oddList(); // Crea una nuova lista con solo gli elementi in posizione dispari.
public ListLinked evenList(); // Crea una nuova lista con solo gli elementi in posizione pari.
public int length(); // Riscrivere *senza* usare cicli; potete fare un overload.
mi basta che me ne venga risolto / spiegato uno fra questi, poi dopo per gli altri ci penso io :D grazie per la pazienza :oink:
la cosa da cui proprio non riesco a cavarmi fuori è come fare a puntare ciclicamente all' elemento next, dovendo passare per head :muro: è una cosa difficile da spiegare copio l'esercizio faccio prima :D
questa è la classe:
public class ListLinked {
private Node head;
private class Node {
private String content;
private Node next;
public Node(String c, Node n) {
content = c;
next = n;
}
public Node(String c) { this(c, null); }
}
public ListLinked() {
head = null;
}
public boolean isEmpty() { return head == null; }
public void addToStart(String s) {
Node newNode = new Node(s, head);
head = newNode;
}
public static ListLinked cons(String c, ListLinked l) {
ListLinked result = new ListLinked();
result.addToStart(c);
if (l != null) result.head.next = l.head;
return result;
}
public String first() { return isEmpty() ? null : head.content; }
public ListLinked rest() {
if (isEmpty()) {
return null;
}
else {
ListLinked result = new ListLinked();
result.head = head.next;
return result;
}
}
public ListLinked concatenate(ListLinked l) {
if (isEmpty()) {
return l;
}
else {
return cons(first(), rest().concatenate(l));
}
}
public int printLength = 5;
public int setPrintLength(int pl) { return printLength = pl; }
public int getPrintLength() { return printLength; }
public String toString() {
String result;
if (isEmpty()) {
return "()";
}
else {
int i;
Node n;
result = "(" + head.content;
for (n = head.next, i = 1;
n != null || (printLength > 0 && i > printLength);
n = n.next, i++) {
result += " " + n.content;
}
if (printLength > 0 && i > printLength) result += "...";
result += ")";
return result;
}
}
public static void main(String[] args) {
ListLinked l = cons("A", cons("B", cons("C", null)));
System.out.println(l);
}
}
questi i metodi da implementare:
public ListLinked reverse(); // Inverte una lista
public ListLinked remove(String s); // Crea una nuova lista con 's' rimosso.
public ListLinked oddList(); // Crea una nuova lista con solo gli elementi in posizione dispari.
public ListLinked evenList(); // Crea una nuova lista con solo gli elementi in posizione pari.
public int length(); // Riscrivere *senza* usare cicli; potete fare un overload.
mi basta che me ne venga risolto / spiegato uno fra questi, poi dopo per gli altri ci penso io :D grazie per la pazienza :oink: