Categorías
Algorithms

LeetCode – Eliminar duplicados de la lista ordenada

Dada una lista vinculada ordenada, elimine todos los duplicados de modo que cada elemento aparezca solo una vez.

Por ejemplo,

Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

Pensamientos

La clave de este problema es utilizar la condición de bucle correcta. Y cambia lo que sea necesario en cada bucle. Puede utilizar diferentes condiciones de iteración como las siguientes 2 soluciones.

Solucion 1

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null)
            return head;
 
        ListNode prev = head;    
        ListNode p = head.next;
 
        while(p != null){
            if(p.val == prev.val){
                prev.next = p.next;
                p = p.next;
                //no change prev
            }else{
                prev = p;
                p = p.next; 
            }
        }
 
        return head;
    }
}

Solucion 2

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null || head.next == null)
            return head;
 
        ListNode p = head;
 
        while( p!= null && p.next != null){
            if(p.val == p.next.val){
                p.next = p.next.next;
            }else{
                p = p.next; 
            }
        }
 
        return head;
    }
}
  LeetCode - Coincidencia de cadenas repetidas (Java)

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

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