Olá, estou com o seguinte exercício para resolver. Mas não estou conseguindo:
Escreva uma Lista Duplamente Encadeada onde os elementos são inseridos sempre em ordem crescente (ou seja, o método de add não terá o índice de inserção).
Olá, estou com o seguinte exercício para resolver. Mas não estou conseguindo:
Escreva uma Lista Duplamente Encadeada onde os elementos são inseridos sempre em ordem crescente (ou seja, o método de add não terá o índice de inserção).
Percorra a lista, do início ao fim e só vá para o próximo elemento se ele for menor que o que será inserido. Quando encontrar um elemento maior ou igual, pare e faça a inserção antes dele.
Respondendo sua pergunta com base na resposta do nosso colega acima. Mesmo o post sendo antigo, fica para os novatos como exemplo:
É uma forma de implementação, não significa que seja a melhor, mais otimizada e mais correta.
class Node {
public int value;
public Node prev;
public Node next;
public Node(int value) {
this.value = value;
this.prev = null;
this.next = null;
}
}
class SortedLinkedList {
private Node head;
private Node tail;
public SortedLinkedList() {
this.head = null;
this.tail = null;
}
public void add(int value) {
Node newNode = new Node(value);
// Se a lista estiver vazia, o novo nó será o head e o tail
if (head == null) {
head = newNode;
tail = newNode;
return;
}
// Percorre a lista até encontrar a posição correta para inserir o novo nó
Node current = head;
while (current != null && current.value < value) {
current = current.next;
}
// Insere o novo nó na posição correta
if (current == null) { // Insere no final da lista
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
} else if (current == head) { // Insere no início da lista
newNode.next = head;
head.prev = newNode;
head = newNode;
} else { // Insere no meio da lista
newNode.prev = current.prev;
newNode.next = current;
current.prev.next = newNode;
current.prev = newNode;
}
}
public void printList() {
Node current = head;
while (current != null) {
System.out.print(current.value + " ");
current = current.next;
}
System.out.println();
}
}