Hallo zusammen
Ich soll unten stehende Aufgabe lösen:
Imlementieren Sie eine gekettete Liste mit den Methoden size(), get(), set(),add() und iterator(); verwenden sie dabei diese Vorlage und vervollständigen Sie die fehlenden Teile
Ich verstehe und weis was eine doppelt gekettete Liste, in der Theorie, aber ich komme nicht ganz draus wo ich anfangen soll und vorallen wie??:autsch:
Ich soll unten stehende Aufgabe lösen:
Imlementieren Sie eine gekettete Liste mit den Methoden size(), get(), set(),add() und iterator(); verwenden sie dabei diese Vorlage und vervollständigen Sie die fehlenden Teile
Java:
import java.util.Iterator;
/**
* Einfache Implementierung einer doppelt geketteten Liste. Implementieren Sie
* alle Methoden, die ein TODO enthalten.
*
* @param <E>
* Typ der Listenelemente
*/
public class DoubleLinkesList<E> implements Iterable<E>
{
/** Anker der Liste */
private Node<E> anchor;
/** Optimierung für Länge der Liste. */
private int size = 0;
/** Konstruktor für neue Liste */
public DoubleLinkesList()
{
anchor = new Node<E>();
anchor.pre = anchor;
anchor.succ = anchor;
}
/**
* @return Anzahl Elemente der Liste
*/
// Ändern Sie diese Methode nicht, sondern führen Sie den Wert von size immer nach, wenn er geändert werden muss.
public int size()
{
return size;
}
/**
* Hilfsmethode, die den Knoten an der vorgegebenen Stelle zurück gibt.
* @param index
* @return Knoten mit gegebenem Index.
* @throws IndexOutOfBoundsException
*/
// Diese Methode kann in der Implementierung der meisten anderen Methoden verwendet werden.
private Node<E> nodeAt(int index)
{
// TODO
return null;
}
/**
* @param index
* @return Element mit gegebenem Index
* @throws IndexOutOfBoundsException
*/
public E get(int index)
{
// TODO
return null;
}
/**
* Setzt den Wert einens Listenelementes neu.
* @param index
* @param newValue Neuer Wert
* @return Alter Wert mit dem gegebenen Index
* @throws IndexOutOfBoundsException
*/
public E set(int index, E newValue)
{
// TODO
return null;
}
/**
* Hilfsmethode: Setzt einen neuen Knoten vor einen bestehenden Listenknoten ein.
* @param node Ein bestehender Listenknoten oder anchor;
* im Falle von anchor wird der Knoten am Ende der Liste eingefügt.
* @param newValue Wert des neuen Listenelements
*/
private void insertBefore(Node<E> node, E newValue)
{
// TODO
}
/**
* Fügt ein neues Listenelement an der vorgegebenen Stelle ein.
* @param index
* @param newValue Wert des neuen Listenelements.
*/
public void add(int index, E newValue)
{
Node<E> node = index == size ? anchor : nodeAt(index);
insertBefore(node, newValue);
}
/**
* Entfernt vorgegebenen Knoten aus der Liste
* @param node Existierender Knoten der Liste.
* @return
*/
private void removeNode(Node<E> node)
{
// TODO
}
/**
* Entfernt Element an vorgegebener Stelle.
* @param index
* @return Wert des
*/
public E remove(int index)
{
Node<E> node = nodeAt(index);
removeNode(node);
return node.value;
}
/**
* @return Iterator für die Liste.
*/
public Iterator<E> iterator()
{
return new DLLIterator();
}
// Other methods
/**
* (Statische) Klasse für Knoten der Liste.
*/
private static class Node<E>
{
E value;
Node<E> pre;
Node<E> succ;
}
/**
* Iterator für gekettete Listen.
*/
private class DLLIterator implements Iterator<E>
{
public boolean hasNext()
{
// TODO
return false;
}
public E next()
{
// TODO
return null;
}
/**
* Entfernt das zuletzt durch next() aufgerufene Element aus der Liste.
* @throws IllegalStateException wenn next noch nie aufgerufen wurde oder wenn
* diese Methode schon einmal aufgerufen wurde nach dem letzten Aufruf von next().
*/
public void remove()
{
// TODO
}
}
}
Ich verstehe und weis was eine doppelt gekettete Liste, in der Theorie, aber ich komme nicht ganz draus wo ich anfangen soll und vorallen wie??:autsch: