Remove Duplicates from Sorted List
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.
代码:
/**
* 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) {
Set<Integer> set=new TreeSet<Integer>();
while(head!=null){
if(!set.contains(head.val)){
set.add(head.val);
}
head=head.next;
}
ListNode result,temp;
Iterator<Integer> it=set.iterator();
if(it.hasNext()){
result=new ListNode(it.next());
temp=result;
while(it.hasNext()){
temp.next=new ListNode(it.next());
temp=temp.next;
}
return result;
}
return null;
}
}
Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
题目解析:在上一题的基础上,把重复的部分去掉,只显示没有重复的
代码:
/**
* 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) {
Set<Integer> set=new TreeSet<Integer>();
Set<Integer> set0=new LinkedHashSet<Integer>();
while(head!=null){
if(!set.contains(head.val)){
set.add(head.val);
set0.add(head.val);
}else{
set0.remove(head.val);
}
head=head.next;
}
ListNode result,temp;
Iterator<Integer> it=set0.iterator();
if(it.hasNext()){
result=new ListNode(it.next());
temp=result;
while(it.hasNext()){
temp.next=new ListNode(it.next());
temp=temp.next;
}
return result;
}
return null;
}
}