Problem bei verketteter Liste



  • Hi,

    und zwar habe ich folgende Methode Programmiert:

    void insertFirst(T val)
      {
    	  if(head == null)
    	  {	
              //Node bekommt als Parameter den Wert und den Zeiger auf das nächste Element
    		  Node<T> tempNode = new Node<T>(val, null);
    		  head=tempNode;
    		  tempNode.setNext(head);DK
    
    	  }
    	  else
    	  {
    		  Node<T> tempNode = new Node<T>(val, head);			  
    		  head = tempNode;		  
    	  }	  
      }
    

    Die Aufgabenstellung besagt, dass die letzte Node auf den Head zeigen soll. Wenn nun der Fall eintritt, dass head != null ist bekomme ich folgenden Fehler:

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    

    Mit dem Fehler kann ich irgendwie nichts anfangen und sehe auch keinen Fehler im Code. Meine verwendete IDE ist Ecplicse mit JRE 1.5.

    mfg Ixtana



  • Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    

    sagt dir, dass dein Speicher voll ist. Meistens liegts dann an einer Endlosschleife. Ich vermute mal, dass es an

    tempNode.setNext(head);
    

    liegt. Kann aber auch falsch sein, weil ich ja den ganzen code nicht kenn. 😉



  • Die Methode setNext ist soweit ok. Die Aufgabe ist für eine bestehende verkettete Liste zusätzliche Methoden zu programieren, d.h. ein Teil des Codes wurde uns gegeben. Darunter auch die Klasse Node. Von dahher gehe ich aus, dass die Methode auch in Ordnung ist, zumal ich sie in anderen Klassen erfolgreich verwendet habe.
    Trotzdem hier der Code:

    class Node<T> {
    
      private T val;
      private Node<T> next;
    
      Node() {
        val = null;
        next = null;
      }
    
      Node(T val, Node<T> next) {
        this.val = val;
        this.next = next;
      }  
    
      void setNext(Node<T> next) {
        this.next = next;
      }
    
    }
    

    Edit: ich hab total vergessen zu sagen, dass der Fehler nur im else-Zweig auftritt.



  • Hi,

    machs mal so:

    void insertFirst(T val)
      {
          if(head == null)
          {   
              //Node bekommt als Parameter den Wert und den Zeiger auf das nächste Element
              head = new Node<T>(val, null);
    
          }
          else
          {
              Node<T> tempNode = new Node<T>(val, head);             
              head = tempNode;         
          }     
      }
    


  • das kann ich nicht so machen, denn das letzte Element soll immer auf den head zeigen und wie gesagt .. der Fehler tritt nur im else - Zweig auf



  • wenn du ne etwas neuere ide hast, dann sollte da auch ein debugger dabei sein. geht das ganze mit dem debugger durch und du wirst sehen wo der fehler ist.



  • Ixtana schrieb:

    das kann ich nicht so machen, denn das letzte Element soll immer auf den head zeigen und wie gesagt .. der Fehler tritt nur im else - Zweig auf

    Ähäm...einer hat ein Denkfehler, entweder ich oder du. Wenn head==null ist, ist also noch kein Element in der Liste. Und wenn noch kein Element in der Liste ist und eines eingefügt wird, muss ja head eine Referenz auf das eine Element sein, sonst geht das ja gar nicht anders?!



  • schon richtig, nur ich habe die Prozedur getestet. Wenn die Liste leer ist und ich ein Element einfügen will klappt das problemlos, aber wenn bereits eins existiert und ich noch eins einfügen will kommt der Fehler.



  • Hi,

    ok, also, ich habe mal den Code abgetippt bzw. kopiert 😃
    Das tempNode.setNext(head); muss aber schon weg, sonst landet man in einer Endlosschleife, wenn man die Liste durchlaufen will. Weil head wieder auf head zeigt 😉

    Aber sonst arbeitet das bei mir Einwandfrei! Vlt. liegt der Fehler einfach in der main-Methode?


Anmelden zum Antworten