2016-12-02 1 views
0

Ich bin sehr zuversichtlich, dass ich in diesem Code richtig liege. Logischerweise macht es Sinn für mich, aber aus irgendeinem Grund weigert sich das Programm, einen bestimmten Punkt zu überschreiten. Ich sollte dies tun, ohne proprietäre Klassen oder Hashtables zu verwenden. Mein Listenknoten ist eine einfache einfach verknüpfte Liste. Angenommen, ich habe zuerst eine Dummy-Liste, 0, kann ich eine Nummer zur Liste hinzufügen, aber das ist alles. Dies ist die Methode, die nicht funktioniert, nachdem Sie die erste Nummer hinzugefügt haben.Eine Nummer in eine verkettete Liste einfügen und dabei in java weiter sortieren

meiner Liste Unter der Annahme, 0 -> 2. und ich versuche 1.

public void insert(int newElement) { 
    List marker = head; 
    List temp = new List(newElement, null); 

    if (head.next == null) { 
     head.next = temp; 
    } else { 
     while (marker.next != null) { 
      if (newElement < marker.next.value) { 
       temp.next = marker.next; 
       marker.next = temp; 
       marker = marker.next; 
      } 
     } 
    } 
} 
+2

, was passiert, wenn Ihr Kopf ist 5 dann 0 hinzufügen, finden Sie eine Liste von 5-> 0 –

+0

Also rechts von der Fledermaus bekommen ich von einem Fall denken kann, die nicht mit Ihrem Code nicht funktionieren. Sie berücksichtigen nicht, dass der eingefügte Knoten kleiner als der Kopf sein kann. Dies bedeutet sofort, dass Ihre Liste unsortiert wird. Beheben Sie das und wenn Sie weitere Fragen haben, kommen Sie zurück und fragen Sie diese. – Jay

+0

Wenn es hilft, ist dies ein Problem mit Ihrer Logik und keine Subtilität oder Fehler in Bezug auf Java selbst. Einige unmittelbare Probleme, die noch nicht erwähnt wurden, sind, dass die 'while'-Schleife niemals endet, wenn' newElement> = marker.next.value', und dass ein Element mehrfach eingefügt werden kann, weil es nicht nach dem ersten Mal stoppt –

Antwort

0
List marker = head; 
    List temp = new List(newElement, null); 

    if (head.value > temp.value) { 
     head.next = new List(head.value, null); 
     head.value = newElement; 
    }else if(head.next == null) 
    { 
     head.next = temp; 
    } 
    else { 
     while (marker.next != null) { 
      if (newElement < marker.next.value) { 
       temp.next = marker.next; 
       marker.next = temp; 
       break; //we added the node, no need to continue looping 
      } 
      else //we need to iterate to the next node in the list until empty 
      { 
       marker = marker.next; 
      } 
     } 
    } 
+0

Ich habe versucht, dies zu verwenden. Es scheint, als wäre ich immer noch festgefahren. Ich habe jeden Wert hinzugefügt, und es funktioniert. Aber dann scheint kein Wert darüber zu liegen. – Shaun

0
public void insert(int val) { 
    Item item = new Item(val); 

    // the case when there is no item (not counting the dummy head) 
    if (head.getNext() == null) { 
     head.setNext(item); 
     item.setNext(null); 
    } else { 
     // if there is at least one item.... 
     Item cursor = head.getNext(); 
     Item prev = cursor; 

     // simply keep looping the list until the new value is less than a value in list 
     // if the new value is greater than all the values in the list... 
     // then the do-while loop will break when null is reached... 
     // at the end of the list 
     do { 
      if (val < cursor.getVal()) { 
       // break and insert 
       break; 
      } 
      prev = cursor; 
      cursor = cursor.getNext(); 
     } while (cursor != null); 

     // insert the item 
     item.setNext(cursor); 

     // the case when the new value is the smallest and is to be inserted at head 
     if (val < head.getNext().getVal()) { 
      head = item; 
     } else prev.setNext(item); 
    } 
} 

Dies ist Ihr Code-Snippet hinzuzufügen:

if (newElement < marker.next.value) { 
    temp.next = marker.next; 
    marker.next = temp; 
    marker = marker.next; 
} 

Take a Bleistift und ein Papier und verfolgen Sie dieses Stück Code. Sie werden sehen, was damit nicht stimmt. Nehmen Sie eine look at this Antwort und sehen Sie sich das Bild an. So sollten Sie Probleme mit verknüpften Listen wirklich beheben. Dieses Bild ist nicht spezifisch für Ihren Code, aber es sollte Ihnen eine Idee geben, wie Sie diese Art von Problemen angehen können.

0

Das scheint zu funktionieren und ich teste es gerade mit guten Ergebnissen. Kann jemand ein Problem mit diesem Code finden, den ich vermisse?

public void insert(int newElement) { 
    List marker = head; 
    List temp = new List(newElement, null); 

    if (head.next == null) { 
     head.next = temp; 
    } else { 
     for (marker = head; marker.next != null; marker = marker.next) { 
      if (temp.value < marker.next.value) { 
       temp.next = marker.next; 
       marker.next = temp; 
       break; 
      } 

     } 
     if (marker.next == null && temp.value > marker.value) { 
       marker.next = temp; 

      } 
    } 

} 
+0

Geben Sie diese Werte der Reihe nach ein und drucken Sie die Ausgabe: '3, 4, 2, 4, 1' – rafid059

+0

eingegeben 3,4,2,4,1 und es hat gut geklappt. Ich danke dir sehr! – Shaun

+0

Es fügt 4 nicht zweimal hinzu, aber das ist nur, weil ich nicht berücksichtigt habe, wenn es etwas entspricht, das bereits in der Liste ist, aber ich bin sicher, dass ich es von hier bekommen kann! – Shaun

Verwandte Themen