devo fare un esercizio in preparazione di un esame universitario, ma non riesco a uscirne fuori qualcuno saprebbe aiutarmi?
la cosa da cui proprio non riesco a cavarmi fuori è come fare a puntare ciclicamente all' elemento next, dovendo passare per head è una cosa difficile da spiegare copio l'esercizio faccio prima

questa è la classe:

codice:
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 grazie per la pazienza