Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Sfida: Implementazione Dei Metodi Size e Delete in LinkedList | Strutture Dati Fondamentali in Java
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Strutture Dati Java

bookSfida: Implementazione Dei Metodi Size e Delete in LinkedList

Compito

Hai implementato tre delle quattro operazioni CRUD insieme. In questo compito, devi implementare due metodi:

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

L'assegnazione si trova su GitHub, quindi devi implementarla localmente nel tuo IDE.

Vedrai la soluzione di questo compito con commenti sull'implementazione.

Breve guida su come completare questo compito:

  • Si consiglia di iniziare con il metodo size(). Per prima cosa, è necessario dichiarare una variabile per tenere traccia del numero di elementi nella lista, quindi semplicemente restituire questa variabile dal metodo;
  • Nel metodo size(), segui gli stessi passaggi del metodo display(). Tuttavia, invece di stampare gli elementi a schermo, incrementa la variabile creata;
  • Nel metodo delete(), passa l'index come parametro. È essenziale validare l'indice per assicurarsi che sia nell'intervallo corretto;
  • Se index == 0, aggiorna semplicemente il riferimento impostando head = head.next;
  • Successivamente, esegui operazioni con il ciclo for per trovare l'indice desiderato dell'elemento;
  • Una volta trovato l'elemento richiesto, esegui la seguente operazione:
    node.next = node.next.next;;
  • In questo modo, rimuoverai il riferimento all'elemento eliminato, eliminandolo effettivamente dalla lista.

Una volta terminato il compito, puoi eseguire il metodo main, dove sono forniti alcuni test.

Inoltre, puoi eseguire i test unitari presenti nella cartella test per validare la tua soluzione.

  • Iterare con attenzione – durante l'implementazione del metodo size(), attraversa la lista come in display(), ma invece di stampare i valori, incrementa un contatore;
  • Gestire i casi limite – nel metodo delete(), controlla sempre se index == 0 per aggiornare correttamente head, e assicurati che l'indice sia nei limiti prima di procedere;
  • Aggiornare correttamente i collegamenti – quando elimini un nodo, aggiorna current.next = current.next.next per saltare l'elemento, rimuovendolo effettivamente dalla lista.
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();
    }
}
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 7

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

bookSfida: Implementazione Dei Metodi Size e Delete in LinkedList

Scorri per mostrare il menu

Compito

Hai implementato tre delle quattro operazioni CRUD insieme. In questo compito, devi implementare due metodi:

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

L'assegnazione si trova su GitHub, quindi devi implementarla localmente nel tuo IDE.

Vedrai la soluzione di questo compito con commenti sull'implementazione.

Breve guida su come completare questo compito:

  • Si consiglia di iniziare con il metodo size(). Per prima cosa, è necessario dichiarare una variabile per tenere traccia del numero di elementi nella lista, quindi semplicemente restituire questa variabile dal metodo;
  • Nel metodo size(), segui gli stessi passaggi del metodo display(). Tuttavia, invece di stampare gli elementi a schermo, incrementa la variabile creata;
  • Nel metodo delete(), passa l'index come parametro. È essenziale validare l'indice per assicurarsi che sia nell'intervallo corretto;
  • Se index == 0, aggiorna semplicemente il riferimento impostando head = head.next;
  • Successivamente, esegui operazioni con il ciclo for per trovare l'indice desiderato dell'elemento;
  • Una volta trovato l'elemento richiesto, esegui la seguente operazione:
    node.next = node.next.next;;
  • In questo modo, rimuoverai il riferimento all'elemento eliminato, eliminandolo effettivamente dalla lista.

Una volta terminato il compito, puoi eseguire il metodo main, dove sono forniti alcuni test.

Inoltre, puoi eseguire i test unitari presenti nella cartella test per validare la tua soluzione.

  • Iterare con attenzione – durante l'implementazione del metodo size(), attraversa la lista come in display(), ma invece di stampare i valori, incrementa un contatore;
  • Gestire i casi limite – nel metodo delete(), controlla sempre se index == 0 per aggiornare correttamente head, e assicurati che l'indice sia nei limiti prima di procedere;
  • Aggiornare correttamente i collegamenti – quando elimini un nodo, aggiorna current.next = current.next.next per saltare l'elemento, rimuovendolo effettivamente dalla lista.
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();
    }
}
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 7
some-alt