Remporte l'offre (liste) - liste des noeuds en double suppression

  (Supprimer le noeud en double dans la liste) Description du sujet:


Dans Énuméré liés nœuds de liste en double, supprimez la liste des nœuds en double, le noeud ne conserve pas répété, retourne la liste des pointeurs de tête. Par exemple, la liste 1-> 2-> 3-> 3-> 4-> 4-> 5 est traité 1-> 2-> 5


  idées de résolution de problèmes: les noeuds en double ici n'est pas réservé il suffit de répéter les noeuds à supprimer, pensez à utiliser la méthode de hachage ensemble, la première répétition du jugement, les doublons sont ajoutés à l'ensemble de hachage pour aller puis supprimer les doublons.

  L'utilisation de deux pointeurs vers l'avant et cabot, représenté nœud précédent et un noeud courant.

/ * 
 Public class ListNode { 
    int val; 
    ListNode next = null; 

    ListNode (int val) { 
        this.val = val; 
    } 
} 
* / 
Import java.util. *; 
public class Solution { 
    publique ListNode deleteDuplication (ListNode PHEAD) 
    { 
        if (PHEAD == null) { 
            return null; 
        } 
        //先找出相同节点存入哈希set中
        HashSet <Entier> set = new HashSet <> (); 
        ListNode pré = PHEAD; 
        ListNode cur = pHead.next; 
        while (! cabot = null) { 
            if (cur.val == pre.val) { 
                set.add (cur.val);
            }
            CUR = pré; 
            CUR = cur.next; 
        } 
        // supprimer le même nœud 
        / ** 
        * supprimer le premier noeud (le premier noeud si elle est un nœud en double) 
        * / 
        la while (PHEAD set.contains = null && (pHead.val)! ) { 
            PHEAD = pHead.next; 
        } 
        IF (PHEAD == null) { 
            return null; 
        } 
        / ** 
        * Supprimer le noeud intermédiaire 
        * / 
        pre = PHEAD; 
        CUR = pHead.next; 
        ! le temps (CUR = null) { 
            IF (set.contains (Cur.Val)) { 
                pre.next = cur.next; 
                CUR = cur.next; 
            } else {la 
                pre = CUR;
                = Contribuer cur.next; 
            } 
        } 
        Retour Pet; 
    } 
}

   (1) supprimer le premier noeud d'une attention particulière doit également être vide lorsque le noeud de tête déterminé, parce que le front du nœud de tête est possible, il est nécessaire d'enlever répété, mais après la suppression de la partie de l'en-tête est vide et, sinon paroles du juge vide:

IF (set.contains (pHead.val)) { 
      Pet = pHead.next; 
}

  Il peut y avoir le cas, répéter le nœud de tête supprimé ne peut pas se permettre:

         

  Ainsi, le besoin est:

tandis que {(PHEAD = null && set.contains (pHead.val)!) 
     PHEAD = pHead.next; 
} 
If (PHEAD == null) { 
     return null; 
}

  (2) Il est de supprimer les éléments répétés en cours lorsque l'utilisation est pre.next = cur.next, sur la base du cabot de l'élément courant, cabot parce que l'ensemble actuel des éléments de répétition à l'intérieur du jeu, doivent être enlevés.

Je suppose que tu aimes

Origine www.cnblogs.com/dashenaichicha/p/12530712.html
conseillé
Classement