import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// 判空
if (null == head) {
return null;
}
ListNode cur = head;
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
while (cur != null) {
if (!map.containsKey(cur.val)) {
map.put(cur.val, 1);
} else {
map.put(cur.val, map.get(cur.val) + 1);
}
cur = cur.next;
}
ListNode newHead = null;
ListNode pre = null;
// 标识用于创建头结点和移动节点
int num = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
int val = entry.getKey();
int cnt = entry.getValue();
ListNode node = new ListNode(val);
if (1 == cnt) {
if (0 == num) {
newHead = node;
pre = newHead;
num ++;
} else {
pre.next = node;
pre = node;
}
}
}
return newHead;
}
}
借助LinkHashMap排序map统计每个元素出现的次数。然后捞出次数为1的数据重新组装新链表。创建新链表记得增加一个头插结点和一个移动节点并用num标识标记区分第一个结点。



京公网安备 11010502036488号