Doppelt verkettete Liste



  • Hey,

    ich bin gerade dabei Java zu lernen (richtiger noob) und hänge beim Thema doppelt verkettete Liste..

    Ich hab eine Aufgabe, undzwar soll ich folgende Methoden implementieren:

    int get(int position)
    int add(int position, int newElement)
    int remove(int position)
    int indexOf(int value)

    Was ich habe:

    class DEntry
    	{
    
    		private final int data;
    
    		private DEntry previous;
    
    		private DEntry next;
    
    		public DEntry(int data)
    		{
    			this.data = data;
    			this.previous = null;
    			this.next = null;
    		}
    	}
    
    public class MyDoubleLinkedList
    {
    
    	private final DEntry header;
    
    	private int size;
    
    	public MyDoubleLinkedList()
    	{
    		header = new DEntry(0);
    		header.next = header;
    		header.previous = header;
    		size = 0;
    
    	}
    
    	public int size()
    	{
    		return size;
    	}
    
    	public int get(int position)
    	{
    		for (int i = 1; i <= size; i++) {
    			header = header.next;
    			if (i == position) {
    				break;
    			}
    		}
    
    		return 0;
    	}
    
    	public int add(int position, int newElement)
    	{
    		return 0;
    	}
    
    	public int remove(int position)
    	{		
    		return 0;
    	}
    
    	public int indexOf(int value)
    	{
    		return 0;
    	}
    
    	public void print()
    	{
    		System.out.print("List: ");
    		DEntry result = header.next;
    		while (result != header) {
    			System.out.print(result.data + ", ");
    			result = result.next;
    		}
    		System.out.println();
    	}
    

    Die get Methode ist von mir, funkt aber nicht so, ich bin nicht sicher was meine nächsten Schritte sind, habt ihr Anregungen für mich?



  • Ich habe zwar seit einer gefühlten Ewigkeit keinen Java Code mehr geschrieben, aber du willst bei einer get() Methode auf einer Liste üblicherweise üblicherweise nicht den Kopf verschieben. Sonst verlierst du die Elemente zwischen dem Kopf der Liste und der neuen Position.

    Eigentlich willst du dann noch überprüfen ob es überhaupt ein Element an der Stelle gibt. Wenn nicht musst du eine entsprechende Fehlerbehandlung durchführen.

    Außerdem willst du in einer get() Funktion das Element auch tatsächlich zurück geben und nicht einfach eine "0".

    Und noch eine Kleinigkeit. Informatiker beginnen gerne mit Position 0 😉 Das heißt "get(0)" sollte das erste Element zurück geben

    public DEntry get(int position) 
         { 
            if(position < size)
            {
              DEntry entry=header;
              for (int i = 1; i < position; i++) 
              { 
                entry = entry.next; 
              } 
              return entry; 
            }
            else
            {
            // Fehler behandlung
            }
         }
    

    Oder gar kein Listen Element zurück geben, sondern die Daten, die an der Stelle gepeichert werden:

    public int get(int position) 
         { 
           if(position < size)
           {
              DEntry entry=header;
              for (int i = 1; i < position; i++) 
              { 
                entry = entry.next; 
              } 
              return entry.get_data(); //Getter müsste dafür noch implementiert werden.
            }
            else
            {
            // Fehler behandlung
            }
    
         }
    

    P.S. Ich habe den Code nicht getestet





  • ja aber dadurch, dass man die leute listen, bäume, sortieralgorithmen usw. nachprogrammieren lässt, lernen sie den umgang damit besser, weil sie dann ja wissen, wie das alles "unten drunter" funktioniert.