题解 | #删除链表中重复的结点#

删除链表中重复的结点

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的记录总结,也欢迎大家评论区留言讨论交流~

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务