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

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

import java.util.*;
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if(pHead == null)
            return null;
	  // 使用map字典记录list中每个元素出现的次数,以便之后将重复出现的元素删除
        Map<Integer,Integer> map = new HashMap<>();
        ListNode cur = pHead;
        while(cur != null){
            if(map.containsKey(cur.val)){
                map.put(cur.val,(int)map.get(cur.val)+1);
            }else{
                map.put(cur.val,1);
            }
            cur = cur.next;
        }

        ListNode res = new ListNode(0);
        res.next = pHead;
        cur = res;
	  	// cur最初指向虚拟头结点,方便如果头结点重复可以删除头结点
        while(cur.next != null){
            if(map.get(cur.next.val) != 1){
                cur.next = cur.next.next;
            }else{
                cur = cur.next;
            }
        }

        return res.next;
    }
}

全部评论

相关推荐

小浪_Coding:个人技能一条测试没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务