Imprimir lista vinculada em Java
Uma lista vinculada é usada para armazenar elementos que são chamados de nós. Os nós compreendem duas entidades - os dados e uma referência. Referência aponta para o próximo nó. Seu endereço na memória não define a ordem dos elementos de uma lista vinculada.
A linguagem de programação Java nos fornece a classe LinkedList
. Essa classe está disponível no Java’s Collections Framework, que fornece a funcionalidade dessa estrutura de dados de lista duplamente vinculada.
Neste tutorial, apresentaremos como imprimir uma lista vinculada em Java.
Podemos criar um objeto de lista vinculada usando a classe LinkedList
, adicionar alguns elementos usando a função add()
e exibi-lo.
Veja o código abaixo.
import java.util.*;
public class ABC {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("apple");
fruits.add("orange");
fruits.add("mango");
String str = fruits.listIterator(1).previous();
System.out.println(fruits);
}
}
Produção:
[apple, orange, mango]
Também podemos usar a função toString()
para exibir a lista final como uma string. O método toString()
retorna os elementos da lista vinculada em um formato de string separado por vírgulas.
Por exemplo,
import java.util.*;
public class ABC {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("apple");
fruits.add("orange");
fruits.add("mango");
String str = fruits.listIterator(1).previous();
System.out.println(fruits.toString());
}
}
Produção:
[apple, orange, mango]
Este método analisa a lista vinculada do início ao fim e os separa por vírgulas.
Também podemos criar uma classe definida pelo usuário para iniciar uma lista vinculada e criar as funcionalidades necessárias. Ao trabalhar com essa classe, precisaremos criar um método para exibir a lista.
Teremos de substituir a função toString()
ao usar este método e atualizá-lo com base nos requisitos do usuário.
Por exemplo,
public class LinkedListNode {
private int data;
private LinkedListNode next;
public LinkedListNode(int data) {
this.data = data;
this.next = null;
}
public int getData() {
return data;
}
public void setData(int d) {
data = d;
}
public LinkedListNode getNext() {
return next;
}
public void setNext(LinkedListNode n) {
next = n;
}
}
public class LinkedList {
public LinkedListNode head;
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.insertFront(1);
list.insertFront(2);
list.insertFront(3);
System.out.println(list.toString());
}
public LinkedList() {
this.head = null;
}
public int removeFront() {
if (head == null) {
System.out.println("Empty list");
return 0;
} else {
int temp = head.getData();
head = head.getNext();
return temp;
}
}
public void insertFront(int data) {
if (head == null) {
head = new LinkedListNode(data);
} else {
LinkedListNode newNode = new LinkedListNode(data);
newNode.setNext(head);
head = newNode;
}
}
public void insertBack(int data) {
if (head == null) {
head = new LinkedListNode(data);
} else {
LinkedListNode newNode = new LinkedListNode(data);
LinkedListNode current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(newNode);
}
}
public int removeBack() {
if (head == null) {
System.out.println("Empty list");
return 0;
} else if (head.getNext() == null) {
int temp = head.getData();
head = null;
return temp;
} else {
LinkedListNode current = head;
while (current.getNext().getNext() != null) {
current = current.getNext();
}
int temp = current.getNext().getData();
current.setNext(null);
return temp;
}
}
public String toString() {
String result = "";
LinkedListNode current = head;
while (current.getNext() != null) {
result += current.getData();
if (current.getNext() != null) {
result += ", ";
}
current = current.getNext();
}
result += current.getData();
return "Contents of the List: " + result;
}
public LinkedListNode getHead() {
return head;
}
}
Produção:
Contents of the List: 3, 2, 1
Também podemos imprimir diretamente a lista necessária sem formatá-la em uma string. Também começamos com o nó inicial, exibimos-o e, em seguida, passamos para o próximo nó.
Veja o seguinte código.
public class LinkedListNode {
private int data;
private LinkedListNode next;
public LinkedListNode(int data) {
this.data = data;
this.next = null;
}
public int getData() {
return data;
}
public void setData(int d) {
data = d;
}
public LinkedListNode getNext() {
return next;
}
public void setNext(LinkedListNode n) {
next = n;
}
}
public class LinkedList {
public LinkedListNode head;
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.insertFront(1);
list.insertFront(2);
list.insertFront(3);
list.display();
}
public LinkedList() {
this.head = null;
}
public int removeFront() {
if (head == null) {
System.out.println("Empty list");
return 0;
} else {
int temp = head.getData();
head = head.getNext();
return temp;
}
}
public void insertFront(int data) {
if (head == null) {
head = new LinkedListNode(data);
} else {
LinkedListNode newNode = new LinkedListNode(data);
newNode.setNext(head);
head = newNode;
}
}
public void insertBack(int data) {
if (head == null) {
head = new LinkedListNode(data);
} else {
LinkedListNode newNode = new LinkedListNode(data);
LinkedListNode current = head;
while (current.getNext() != null) {
current = current.getNext();
}
current.setNext(newNode);
}
}
public int removeBack() {
if (head == null) {
System.out.println("Empty list");
return 0;
} else if (head.getNext() == null) {
int temp = head.getData();
head = null;
return temp;
} else {
LinkedListNode current = head;
while (current.getNext().getNext() != null) {
current = current.getNext();
}
int temp = current.getNext().getData();
current.setNext(null);
return temp;
}
}
public void display() {
LinkedListNode current = head;
while (current.getNext() != null) {
System.out.println(current.getData());
current = current.getNext();
}
System.out.println(current.getData());
}
public LinkedListNode getHead() {
return head;
}
}
Produção:
3
2
1