Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Implémentation des Méthodes Size et Delete dans LinkedList | Structures de Données Fondamentales en Java
Structures de Données Java

bookDéfi : Implémentation des Méthodes Size et Delete dans LinkedList

Tâche

Vous avez implémenté trois des quatre opérations CRUD ensemble. Dans cette tâche, vous devez implémenter deux méthodes :

  • public int size() ;
  • public void delete(int index).

L'exercice se trouve sur GitHub, vous devez donc l'implémenter localement dans votre IDE.

Vous verrez la solution de cette tâche avec des commentaires sur l'implémentation.

Un guide succinct pour réaliser cette tâche :

  • Il est conseillé de commencer par la méthode size(). Il faut d'abord déclarer une variable pour suivre le nombre d'éléments dans la liste, puis simplement retourner cette variable dans la méthode ;
  • Dans la méthode size(), suivez les mêmes étapes que dans la méthode display(). Cependant, au lieu d'afficher les éléments à l'écran, incrémentez la variable créée ;
  • Dans la méthode delete(), passez l'index en paramètre. Il est essentiel de valider l'index pour s'assurer qu'il est dans la plage correcte ;
  • Si index == 0, il suffit de mettre à jour la référence en définissant head = head.next ;
  • Ensuite, effectuez des opérations avec la boucle for pour trouver l'index souhaité de l'élément ;
  • Une fois l'élément requis trouvé, effectuez l'opération suivante :
    node.next = node.next.next; ;
  • De cette façon, vous supprimerez la référence à l'élément supprimé, ce qui le retire effectivement de la liste.

Une fois la tâche terminée, vous pouvez exécuter la méthode main, où des tests sont fournis.

Vous pouvez également exécuter les tests unitaires situés dans le dossier test pour valider votre solution.

  • Itération attentive – lors de l'implémentation de la méthode size(), parcourez la liste comme dans display(), mais au lieu d'afficher les valeurs, incrémentez un compteur ;
  • Attention aux cas limites – dans la méthode delete(), vérifiez toujours si index == 0 pour mettre à jour correctement head, et assurez-vous que l'index est dans les limites avant de continuer ;
  • Mise à jour correcte des liens – lors de la suppression d'un nœud, mettez à jour current.next = current.next.next pour contourner l'élément, ce qui le retire effectivement de la liste.
package com.example;

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class SinglyLinkedList {
    private Node head;

    public SinglyLinkedList() {
        this.head = null;
    }

    public void append(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }

        Node current = head;
        while (current.next != null) {
            current = current.next;
        }

        current.next = newNode;
    }

    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }

    public void update(int index, int newData) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid index");
            return;
        }

        Node current = head;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }

        current.data = newData;
    }

    public void delete(int index) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid Index");
            return;
        }

        if (index == 0) {
            head = head.next;
            return;
        }

        Node current = head;
        for (int i = 0; i < index - 1; i++) {
            current = current.next;
        }

        current.next = current.next.next;
    }

    public int size() {
        int count = 0;
        Node current = head;
        while (current != null) {
            count++;
            current = current.next;
        }
        return count;
    }

}

public class Main {
    public static void main(String[] args) {
        SinglyLinkedList linkedList = new SinglyLinkedList();

        // Adding elements to the end of the list (Create)
        linkedList.append(1);
        linkedList.append(2);
        linkedList.append(3);
        linkedList.append(4);

        // Displaying the content of the list (Read)
        System.out.println("Contents of the list:");
        linkedList.display();

        // Updating a value by index (Update)
        linkedList.update(2, 10);
        System.out.println("List after updating the value at index 2:");
        linkedList.display();

        // Deleting an element by index (Delete)
        linkedList.delete(1);
        System.out.println("List after deleting the element at index 1:");
        linkedList.display();
    }
}
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 7

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

bookDéfi : Implémentation des Méthodes Size et Delete dans LinkedList

Glissez pour afficher le menu

Tâche

Vous avez implémenté trois des quatre opérations CRUD ensemble. Dans cette tâche, vous devez implémenter deux méthodes :

  • public int size() ;
  • public void delete(int index).

L'exercice se trouve sur GitHub, vous devez donc l'implémenter localement dans votre IDE.

Vous verrez la solution de cette tâche avec des commentaires sur l'implémentation.

Un guide succinct pour réaliser cette tâche :

  • Il est conseillé de commencer par la méthode size(). Il faut d'abord déclarer une variable pour suivre le nombre d'éléments dans la liste, puis simplement retourner cette variable dans la méthode ;
  • Dans la méthode size(), suivez les mêmes étapes que dans la méthode display(). Cependant, au lieu d'afficher les éléments à l'écran, incrémentez la variable créée ;
  • Dans la méthode delete(), passez l'index en paramètre. Il est essentiel de valider l'index pour s'assurer qu'il est dans la plage correcte ;
  • Si index == 0, il suffit de mettre à jour la référence en définissant head = head.next ;
  • Ensuite, effectuez des opérations avec la boucle for pour trouver l'index souhaité de l'élément ;
  • Une fois l'élément requis trouvé, effectuez l'opération suivante :
    node.next = node.next.next; ;
  • De cette façon, vous supprimerez la référence à l'élément supprimé, ce qui le retire effectivement de la liste.

Une fois la tâche terminée, vous pouvez exécuter la méthode main, où des tests sont fournis.

Vous pouvez également exécuter les tests unitaires situés dans le dossier test pour valider votre solution.

  • Itération attentive – lors de l'implémentation de la méthode size(), parcourez la liste comme dans display(), mais au lieu d'afficher les valeurs, incrémentez un compteur ;
  • Attention aux cas limites – dans la méthode delete(), vérifiez toujours si index == 0 pour mettre à jour correctement head, et assurez-vous que l'index est dans les limites avant de continuer ;
  • Mise à jour correcte des liens – lors de la suppression d'un nœud, mettez à jour current.next = current.next.next pour contourner l'élément, ce qui le retire effectivement de la liste.
package com.example;

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class SinglyLinkedList {
    private Node head;

    public SinglyLinkedList() {
        this.head = null;
    }

    public void append(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }

        Node current = head;
        while (current.next != null) {
            current = current.next;
        }

        current.next = newNode;
    }

    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }

    public void update(int index, int newData) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid index");
            return;
        }

        Node current = head;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }

        current.data = newData;
    }

    public void delete(int index) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid Index");
            return;
        }

        if (index == 0) {
            head = head.next;
            return;
        }

        Node current = head;
        for (int i = 0; i < index - 1; i++) {
            current = current.next;
        }

        current.next = current.next.next;
    }

    public int size() {
        int count = 0;
        Node current = head;
        while (current != null) {
            count++;
            current = current.next;
        }
        return count;
    }

}

public class Main {
    public static void main(String[] args) {
        SinglyLinkedList linkedList = new SinglyLinkedList();

        // Adding elements to the end of the list (Create)
        linkedList.append(1);
        linkedList.append(2);
        linkedList.append(3);
        linkedList.append(4);

        // Displaying the content of the list (Read)
        System.out.println("Contents of the list:");
        linkedList.display();

        // Updating a value by index (Update)
        linkedList.update(2, 10);
        System.out.println("List after updating the value at index 2:");
        linkedList.display();

        // Deleting an element by index (Delete)
        linkedList.delete(1);
        System.out.println("List after deleting the element at index 1:");
        linkedList.display();
    }
}
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 7
some-alt