Desafio: 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étododisplay(). No entanto, em vez de imprimir os elementos na tela, incremente a variável criada; - No método
delete(), passe oindexcomo parâmetro. É fundamental validar o índice para garantir que está dentro do intervalo correto; - Se
index == 0, basta atualizar a referência definindohead = head.next; - Em seguida, realize operações com o laço
forpara 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 emdisplay(), mas, em vez de imprimir valores, incremente um contador; - Atenção aos casos extremos – no método
delete(), sempre verifique seindex == 0para atualizar corretamente ohead, 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.nextpara 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();
}
}
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Incrível!
Completion taxa melhorada para 4
Desafio: 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étododisplay(). No entanto, em vez de imprimir os elementos na tela, incremente a variável criada; - No método
delete(), passe oindexcomo parâmetro. É fundamental validar o índice para garantir que está dentro do intervalo correto; - Se
index == 0, basta atualizar a referência definindohead = head.next; - Em seguida, realize operações com o laço
forpara 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 emdisplay(), mas, em vez de imprimir valores, incremente um contador; - Atenção aos casos extremos – no método
delete(), sempre verifique seindex == 0para atualizar corretamente ohead, 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.nextpara 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();
}
}
Obrigado pelo seu feedback!