题目简介
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
.
自己的解法
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode p = head;
ListNode last =head;
Set<Integer> set = new HashSet<Integer>();
while(p != null){
if (!set.contains(p.val)) {
set.add(p.val);
last = p;
p = p.next;
}
else {
if(p.next!=null){
last.next = p.next;
p = p.next;
}
else{
last.next = null;
p = null;
}
}
}
return head;
}
}
Hot解法
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)return head;
head.next = deleteDuplicates(head.next);
return head.val == head.next.val ? head.next : head;
}
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode list = head;
while(list != null) {
if (list.next == null) {
break;
}
if (list.val == list.next.val) {
list.next = list.next.next;
} else {
list = list.next;
}
}
return head;
}
}
这种解法利用了迭代,如果找到相同元素就删除,如果不是相同元素,list就进行后移。直到最后。