题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
样例
示例1:输入:head = [1,1,2]
输出:[1,2]
示例2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
思路
和昨天那题差不多,用一个map记录每个元素是否出现。如果元素第一次出现,就加入新链表,否则不管该元素而判断下一个元素。
代码
class Solution {
public ListNode deleteDuplicates(ListNode head) {
Map<Integer, Integer> mp = new LinkedHashMap<Integer, Integer>();
ListNode p = head;
ListNode result = new ListNode(-1,null);
ListNode pt = result;
while(true) {
if(p != null) {
//未记录的元素计入map,并加入新链表
if(mp.get(p.val) == null){
mp.put(p.val, 1);
ListNode tmp = new ListNode(p.val,null);
pt.next = tmp;
pt = tmp;
}
p = p.next;
}
else
break;
}
return result.next;
}
}