7
votes

Supprimer l'élément à Index N, LinkedList

c'est-à-dire que les devoirs em> strong>

On m'a demandé de supprimer l'élément KTH d'une liaison linked. J'ai également reçu sa taille un int n code>. La question est de savoir comment mettre à jour la taille de ma liste après avoir supprimé le nœud en position "K"? S'il y a quelque chose qui ne va pas avec la logique de mon code, veuillez le mentionner. P>

Je ne veux pas que la solution est juste des conseils, merci. P>

int N;               
Node first;         

// delete the kth element (where k is between 0 and N-1 inclusive)
public void delete (int k) {
    if (k < 0 || k >= N)
        throw new IllegalArgumentException();
    Node x = first;
    if( k == 0){
        first = x.next;
        N = N - 1;
    }
    for(int i = 1; i < k; i++){
        x = x.next;
        N = N - 1;
    }
    x.next = x.next.next;
    N = N - 2;
}


5 commentaires

La taille de la liste ne va-t-elle toujours pas être inférieure après avoir retiré un élément?


En outre, est-ce une liste individuellement liée ou doublement liée?


Liste locale


Pourquoi voudriez-vous supprimer manuellement l'article de la liste? Pour autant que je sache, LL a sa propre suppression (ou supprimer Je ne me souviens pas de) la méthode, qui se souciera des décalages et des délinkings nécessaires.


L'OP rédige la mise en œuvre de leur possédez la liste liée à la liste liée , sans utiliser java.util.linkedlist .


3 Réponses :


2
votes

Lorsque vous supprimez un nœud, il vous suffit de modifier le nœud précédent S. / code> suivant au (nouveau) nœud suivant en k et décrément n < / code> ( n - ) pour mettre à jour la taille de la liste.

Edit

Faites également attention à votre boucle pour votre boucle, vous modifiez le prochain des nœuds avant le nœud k


0 commentaires

0
votes

envisagez de faire deux cas: k == 0 et le reste. La taille est donnée par N de sorte que la nouvelle taille doit être N - 1.

Node x = first; // What a name
if (k == 0) {
    first = x.next; // Could be first = first.next
    N = N - 1;
    // Are you done here?
}

for (int i = 1; i < k; i++) {
    x = x.next;
    // Really? N = N - 1;
}
x.next = x.next.next;
// Really? N = N - 2;
N = N - 1;


0 commentaires

0
votes

Essayez d'utiliser la méthode list.remove (objet obj) définie dans la liste liée. Pour obtenir l'objet à l'élément K-TH, vous pouvez utiliser list.get.get (int index) . Une fois que vous avez trouvé le k-ème élément, envisagez de vous casser ou de revenir pour éviter tout problème de modification simultanée ou des erreurs liées à l'index.


1 commentaires

L'OP rédige la mise en œuvre de leur possédez la liste liée à la liste liée , sans utiliser java.util.linkedlist . Lire toute la question avant de répondre toujours à l'aide.