Entfernen Sie Duplikate aus einer unsortierten verketteten Liste

import java.util.*;
/*
 *  Remove duplicates from an unsorted linked list
 */
public class LinkedListNode {  
    public int data;  
    public LinkedListNode next;  

    public LinkedListNode(int data) {  
        this.data = data;    
    }  
}

public class Task {
    public static void deleteDups(LinkedListNode head){
      Hashtable<Integer, Boolean> table=new Hashtable<Integer, Boolean>();
      LinkedListNode previous=null;
      //nth node is not null
      while(head!=null){
        //have duplicate
            if(table.containsKey(head.data)){
                            //skip duplicate
                previous.next=head.next;
            }else{
            //put the element into hashtable
            table.put(head.data,true);
            //move to the next element
            previous=head;
            }
      //iterate
      head=head.next;
      }
   }
   public static void main (String args[]){
       LinkedList<Integer> list=new LinkedList<Integer>();
       list.addLast(1);
       list.addLast(2);
       list.addLast(3);
       list.addLast(3);
       list.addLast(3);
       list.addLast(4);
       list.addLast(4);
       System.out.println(list);
       LinkedListNode head=new LinkedListNode(list.getFirst());
       Task.deleteDups(head);
       System.out.println(list);
   }
}

Das Ergebnis: [1, 2, 3, 3, 3, 4, 4]
[1, 2, 3, 3, 3, 4, 4]

Beseitigt Sie nicht die Duplikate.

Warum nicht die Methode funktioniert?

stackoverflow.com/questions/9459557/...
Sie sind überhaupt nicht der Rückkehr die neue Liste von der deleteDups Methode.
Ich schlage vor, Sie verwenden Sie Ihre debugger in der IDE Schritt für Schritt durch den code und verstehen. Wenn Sie nicht wissen, wie es zu benutzen, es ist nie zu spät zu lernen. Würde ich auch nicht verwenden, Hashtable, wie es ist ein Erbe der Klasse für die letzten 15 Jahre oder so. Sie sollten die Verwendung von einem Satz wie HashSet.
Ihre Liste ist nicht angeschlossen. Sie sind nur das hinzufügen von Knoten, sondern Ihre Funktion zurück, sofort, weil jedes element nicht ein "weiter" - Zeiger gesetzt

InformationsquelleAutor Ivan | 2013-07-14

Schreibe einen Kommentar