¿Cómo eliminar elementos duplicados de Java LinkedList?

La lista enlazada es parte de la colección en el paquete java.util . La clase LinkedList es una implementación de la estructura de datos LinkedList , es una estructura de datos lineal. En LinkedList, debido a la asignación dinámica de memoria, las inserciones y eliminaciones son procesos sencillos. Para eliminar duplicados de

Ejemplo:

Initial composition : 
7 2 3 3 2 7 6 2 
After removing duplicates : 
7 2 3 6

Representación pictórica : (un Node en una LinkedList tiene dos partes: datos y enlace al siguiente Node (nulo en el caso del último elemento)

How-to-Remove-Duplicate-Elements-From-Java-LinkedList

Algoritmo: 

  1. Inicialmente, se crea un nuevo Node que apunta a la cabeza.
  2. Un Node temporal apuntará a actual y el Node de índice apuntará a actual.siguiente.
  3. Si los datos del Node índice y el Node actual son los mismos, es decir, si se encuentra un elemento duplicado, temp.next apunta a index.next, es decir, omite el elemento duplicado.
  4. Si no se cumple la condición anterior, se hace que la temperatura apunte al Node anterior de un índice.
  5. El Node de índice itera hasta el final y se repiten los pasos 3 y 4.
  6. Los pasos 2 a 5 se ejecutan hasta que el Node actual apunta al final, es decir, llega a su final.

A continuación se muestra la implementación del enfoque anterior:

Java

// Java Program to Remove Duplicate Elements From LinkedList
import java.io.*;
 
// Creating the node class for a singly linkedlist
class Node {
    Node next;
    int data;
 
    public Node(int data)
    {
        this.data = data;
        this.next = null;
    }
}
 
public class singlyLinkedList {
 
    // Defining the head and tail of a singly linkedlist
    public Node head = null;
    public Node tail = null;
 
    // creating add() that enables addition
    // of a new node to the list
    public void add(int data)
    {
        // Creating a new node
        Node newNode = new Node(data);
 
        // Checking whether the list is empty or not
        if (head == null) {
            // If the list is found to be empty, both head
            // and tail are made to point to  the new node
            head = newNode;
            tail = newNode;
        }
        else {
            // newNode is added after tail in such a way
            // that next node of the tail points to newNode
            tail.next = newNode;
            // newNode becomes the new tail of the list
            tail = newNode;
        }
    }
 
    // Creating removeDuplicates() to remove
    // duplicates from the linkedlist
    public void removeDuplicates()
    {
        // current node points to the head element
        Node current = head, index = null, temp = null;
 
        if (head == null) {
            return;
        }
        else {
            while (current != null) {
                // temp node points to the previous node
                temp = current;
                // index node points to node next to current
                index = current.next;
 
                while (index != null) {
                    // checking if node of current data is
                    // equal to index node data
                    if (current.data == index.data) {
 
                        // duplicate node is skipped
                        temp.next = index.next;
                    }
                    else {
                        // temp node points to the previous
                        // node of index node
                        temp = index;
                    }
                    index = index.next;
                }
                current = current.next;
            }
        }
    }
 
    // creating print() to print all the data
    // of nodes present in the list
    public void print()
    {
        // Node current will point to head
        Node current = head;
        if (head == null) {
            System.out.println(
                "Empty list please insert some elements first");
            return;
        }
        while (current != null) {
 
            System.out.print(current.data + " ");
            // incrementing pointer
            current = current.next;
        }
        System.out.println();
    }
 
    public static void main(String[] args)
    {
 
        singlyLinkedList List = new singlyLinkedList();
 
        // Adding data to the list
        List.add(9);
        List.add(1);
        List.add(1);
        List.add(3);
        List.add(4);
        List.add(8);
        List.add(2);
        List.add(1);
 
        System.out.println("Initial composition : ");
        List.print();
 
        // removing duplicate nodes
        List.removeDuplicates();
 
        System.out.println("After removing duplicates : ");
        List.print();
    }
}
Producción

Initial composition : 
9 1 1 3 4 8 2 1 
After removing duplicates : 
9 1 3 4 8 2 

Complejidad del tiempo: O(N 2 )

Publicación traducida automáticamente

Artículo escrito por dikshapatro y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *