Soluzione sesto compitino (18/6/2008)
/*
* Il metodo compatta riceve come argomento una lista di Integer e restituisce * una lista di Integer priva di ripetizioni,
* gli elementi da togliere sono quelli successivi al primo trovato.
* L'ordine degli elementi rimasti non deve essere modificato.
* La complessità può essere di ordine quadratico.
* Per esempio se si passa [1,2,3,5,1,2,3,4] si ottiene [1,2,3,5,4]
* La lista originaria non deve essere modificata.
*/
public static ListNode<Integer> compatta(ListNode<Integer> a) { if (a == null) return null;
return prepend(compatta(a.element, compatta(a.next)),a.element);
}
public static ListNode<Integer> compatta(int b, ListNode<Integer> a) { if (a == null) return null;
if(a.element==b)return compatta(b,a.next);
else return prepend(compatta(b, a.next),a.element);
}
public static ListNode<Integer> prepend(ListNode<Integer> a, int b) { return new ListNode<Integer>(b, a);
}