Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Desafio: Implementando os Métodos Size e Delete em LinkedList | Estruturas de Dados Fundamentais em Java
Estruturas de Dados em Java

bookDesafio: Implementando os Métodos Size e Delete em LinkedList

Tarefa

Você implementou três das quatro operações CRUD até agora. Nesta tarefa, é necessário implementar dois métodos:

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

A atividade está no GitHub, portanto, você deve implementá-la localmente em sua IDE.

Você verá a solução desta tarefa com comentários sobre a implementação.

Um breve guia sobre como concluir esta tarefa:

  • Recomenda-se começar pelo método size(). Primeiro, é necessário declarar uma variável para acompanhar o número de elementos na lista e, em seguida, retornar essa variável no método;
  • No método size(), siga os mesmos passos do método display(). No entanto, em vez de imprimir os elementos na tela, incremente a variável criada;
  • No método delete(), passe o index como parâmetro. É fundamental validar o índice para garantir que está dentro do intervalo correto;
  • Se index == 0, basta atualizar a referência definindo head = head.next;
  • Em seguida, realize operações com o laço for para encontrar o índice desejado do elemento;
  • Quando o elemento necessário for encontrado, realize a seguinte operação:
    node.next = node.next.next;;
  • Dessa forma, a referência ao elemento excluído será removida, efetivamente excluindo-o da lista.

Após finalizar a tarefa, execute o método main, onde alguns testes estão disponíveis para você.

Além disso, é possível executar os testes unitários localizados na pasta test para validar sua solução.

  • Iterar com atenção – ao implementar o método size(), percorra a lista assim como em display(), mas, em vez de imprimir valores, incremente um contador;
  • Atenção aos casos extremos – no método delete(), sempre verifique se index == 0 para atualizar corretamente o head, e certifique-se de que o índice está dentro dos limites antes de prosseguir;
  • Atualize os links corretamente – ao excluir um nó, atualize current.next = current.next.next para ignorar o elemento, removendo-o efetivamente da 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();
    }
}
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

bookDesafio: Implementando os Métodos Size e Delete em LinkedList

Deslize para mostrar o menu

Tarefa

Você implementou três das quatro operações CRUD até agora. Nesta tarefa, é necessário implementar dois métodos:

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

A atividade está no GitHub, portanto, você deve implementá-la localmente em sua IDE.

Você verá a solução desta tarefa com comentários sobre a implementação.

Um breve guia sobre como concluir esta tarefa:

  • Recomenda-se começar pelo método size(). Primeiro, é necessário declarar uma variável para acompanhar o número de elementos na lista e, em seguida, retornar essa variável no método;
  • No método size(), siga os mesmos passos do método display(). No entanto, em vez de imprimir os elementos na tela, incremente a variável criada;
  • No método delete(), passe o index como parâmetro. É fundamental validar o índice para garantir que está dentro do intervalo correto;
  • Se index == 0, basta atualizar a referência definindo head = head.next;
  • Em seguida, realize operações com o laço for para encontrar o índice desejado do elemento;
  • Quando o elemento necessário for encontrado, realize a seguinte operação:
    node.next = node.next.next;;
  • Dessa forma, a referência ao elemento excluído será removida, efetivamente excluindo-o da lista.

Após finalizar a tarefa, execute o método main, onde alguns testes estão disponíveis para você.

Além disso, é possível executar os testes unitários localizados na pasta test para validar sua solução.

  • Iterar com atenção – ao implementar o método size(), percorra a lista assim como em display(), mas, em vez de imprimir valores, incremente um contador;
  • Atenção aos casos extremos – no método delete(), sempre verifique se index == 0 para atualizar corretamente o head, e certifique-se de que o índice está dentro dos limites antes de prosseguir;
  • Atualize os links corretamente – ao excluir um nó, atualize current.next = current.next.next para ignorar o elemento, removendo-o efetivamente da 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();
    }
}
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 7
some-alt