2016-05-04 8 views
-2

I Kommentare hinzugefügt haben meine Logik wie dieseArtikel entfernen aus dem verknüpften Liste

public void removeStrin(String name) throws IllegalArgumentException { 
    // If the name is equal to null throw an exception 
    if(name == null) { 
     throw new IllegalArgumentException(); 
    } 

    //set the removeTempString to the head 
    Game Rem = head; 
+0

Wo ist die verknüpfte Liste? Ist es eine verknüpfte Liste von Spielen? Oder ist die Spielklasse selbst eine verkettete Liste? Vielleicht möchten Sie auch die Spielklasse anzeigen ... Ansonsten müssen Sie normalerweise den Zeiger von prev nach next ändern und dann den aktuellen löschen ... Und ja. In eine Rekursion zu gehen ist falsch. Und wo in der Schleife gehst du zum nächsten Element? – dingalapadum

+0

Es ist eine verknüpfte Liste von Spielen. – PeterP1989

Antwort

1

Tun Sie etwas zu erklären, stellen Sie die previous.nxt = nodetobedeleted.next; und leer und Ressourcen die haben notobedeleted könnten.

 public void removeGame(String name) throws IllegalArgumentException { 
      // If the name is equal to null throw an exception 
      if(name == null) { 
       throw new IllegalArgumentException(); 
      } 

      //set the removeTempString to the head 
      Game removeTempString = head; 
      Game prev = null; 
      //while it is not null 
      while(removeTempString != null) { 
       //if the removeTempString.name equals the String name 
       if(removeTempString.name.equals(name)){ 
        if(prev != null){ 
          prev.next = removeTempString.next; 
        } 
       } 
       // set prev to current`enter code here` 
       prev = removeTempString; 
       // to iterate set it to next node in list 
       removeTempString = removeTempString.next;//the next pointer you have 

    } 
+0

Überprüfen Sie den Code. es ist schon da 'if (prev! = null) { prev.next = removeTempString.next; } ' –

+0

ja. Ich glaube nicht, dass dieser Anruf notwendig ist. es könnte zu nie endender Rekursion führen. Fühlen Sie sich frei, die Methode zu ändern. Es war nur ein Beispielcode. –

+0

Sie können sogar equalsIgnoreCase verwenden, wenn Sie Groß- und Kleinschreibung nicht vergleichen möchten. –

0

summativ, Ihr Problem ruft für die Suche nach und einen Knoten in verketteten Liste unabhängig von ihrer Position in der Kette zu entfernen, weshalb, könnte es die ersten, letzten oder irgendwo in der Mitte sein.

Darunter sind einige sichere Annahmen bezüglich des Problems.

  1. Die Spiel Klasse hat die folgende Struktur.

    class Game{ 
        public String name; 
        public Game prev; 
        public Game next; 
    } 
    
  2. Das Kopf Objekt bereits in der enthaltenden Klasse definiert.

Die removeGame() Methode muss in der folgenden drei Reihe von Szenarien codiert werden, die implizit Pflege von Knoten Löschungen brauchen. Wenn es etwas zurückgibt, können Sie Informationen über erfolgreiche Löschungen erhalten. Hier wird Boolean zurückgegeben. Es basiert tatsächlich auf dem Thema, dass der Subjektknoten, der gelöscht werden soll, ein Kandidat der Speicherbereinigung sein muss.

public boolean removeGame(Game txt) 
{ 
if(txt==null)return false; 
Game itr = head; 

//if its header 
if(itr.name.equals(txt.name)) 
{ 
Game newHead = head.next; 
head=newHead; 
//The previous header hence gets derefrenced and becomes a candidate of garbage collection 
return true; 
} 

//if its midway or end 
itr = head.next; 
while(itr!=null){ 
Game subjectNode = itr; 
if(subjectNode.name.equals(txt.name)) 
{ 
Game newPrev = subjectNode.prev; 
Game newNext = subjectNode.next; 
newPrev.next = subjectNode.next; 
newNext.prev= subjectNode.prev; 

subjectNode=null; 
//This makes it derefrenced and hence subject to garbage collections after refrence swaps. 
    return true; 
    } 
    itr = itr.next; 
    } 
    return false; 
    } 

Auch da Sie die Java-Implementierung tun, bevorzugen passend zu Ihrem Szenario mit LinkedList Klasse von util-Paket Java.

0

Versuchen Sie, diese Logik zu verwenden, es in beiden Richtungen gilt

public Object delete(Object key) // works 
{ 
    Node prev = null; 
    Node curr = top; 
    Object result = null; 

    //search for the key 
    while((curr != null) && (!curr.getData().equals(key))) 
    { 
     prev = curr; 
     curr = curr.getNext(); 
    } 

    //found the item we are looking for! 
    if (curr != null) 
    { 
     //wait! is the item we are looking for the first element in the list? 
     if (prev != null)//nah, it's not 
     { 
      prev.setNext(curr.getNext()); 
     }else //yes! it is 
     { 
      top = curr.getNext(); 
     } 
    } 

    return result; 
} 
Verwandte Themen