题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
思路:利用map集合的key-value属性去除重复的node,具体是,key记录表值,value记录出现的个数。再循环遍历,将出现个数为1的加入到list集合,然后排序,然后构造新的链表。
置空判断:1、pHead上来要做null的判断
2、list集合排序之前要做置空的判断
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
//空指针判断
if(pHead == null){
return pHead;
}
//重复节点不保留
//map来计数
Map<Integer, Integer> map = new HashMap<>();
ListNode cur = pHead;
while (cur != null) {
map.put(cur.val, map.get(cur.val) == null ? 1 : map.get(cur.val) + 1);
cur = cur.next;
}
//用list排序然后构造
List<Integer> list = new ArrayList<>();
map.forEach((key, value) -> {
if(value == 1){
list.add(key);
}
});
if(list.size() > 0){
Collections.sort(list);
ListNode head = new ListNode(list.get(0));
ListNode pre = head;
for(int i = 1 ; i < list.size() ; i ++){
ListNode node = new ListNode(list.get(i));
pre.next = node;
pre = node;
}
return head;
}else{
return null;
}
}
}
剑指offer刷题总结 文章被收录于专栏
本专栏是本人刷剑指offer的记录总结,也欢迎大家评论区留言讨论交流~


