一开始用双指针,出现误区,解不出来
用set也解不出来
利用LinkedHashMap<node.val,count>来解题,先将所有node的val都放入map,如果已经存在就count++,然后去遍历整个map,将count==1的所有node.val作为新的节点,连在后面
Map<Integer,Integer> map=new LinkedHashMap<Integer,Integer>();//普通的hashmap无法按插入的顺序来删除,如果想按插入的顺序来输出,就利用LinkedHashMap
思路比较简单,直接看代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode cur=new ListNode(0);
ListNode head1=cur;
ListNode cur1=head;
Map<Integer,Integer> map=new LinkedHashMap<Integer,Integer>();//普通的hashmap无法按插入的顺序来删除,
//如果想按插入的顺序来输出,就利用LinkedHashMap
while(cur1!=null){
if(map.containsKey(cur1.val)){
int temp=map.get(cur1.val);
temp++;
map.put(cur1.val,temp);
}else{
map.put(cur1.val,1);
}
cur1=cur1.next;
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if(entry.getValue()==1){
cur.next=new ListNode(entry.getKey());
cur=cur.next;
}
}
return head1.next;
}
}