问题描述:
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
一开始看错了题目,没看到sorted linked list这个条件,也就是说,并不需要用一个HashMap保存出现过的,只需要一直遍历直到下一个值与上一个值不同就可以啦,这样这道题难度就简单了很多。使用递归瞬间得出答案。
代码如下:
import java.util.*;
public class DeleteDuplicates {
public ListNode deleteDuplicates(ListNode head) {
if(head==null||head.next==null)return head;
ListNode res=deleteDuplicates(head.next);
head.next=res;
return head.val==head.next.val?head.next:head;
}
public static void main(String[]args){
ReverseListNode c1=new ReverseListNode();
DeleteDuplicates c2=new DeleteDuplicates();
int[]nums={1,1,1,2,2,3};
ListNode p=c1.generateList(nums),p2=p;
while(p!=null){
System.out.print(p.val+" ");
p=p.next;
}
System.out.println("------");
ListNode head=c2.deleteDuplicates(p2);
while(head!=null){
System.out.print(head.val+" ");
head=head.next;
}
}
}