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; } } |