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

删除链表中重复的结点

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) {
        HashMap<Integer, ListNode> map = new HashMap<>();
        Deque<ListNode> listNodeDeque = new LinkedList<>();

        //遍历链表
        while (pHead != null) {
            if (map.containsKey(pHead.val)) {
                //有重复,删除重复
                ListNode listNode = map.get(pHead.val);
                listNodeDeque.remove(listNode);
            } else {
                //没有重复,往集合里添加
                listNodeDeque.add(pHead);
                map.put(pHead.val, pHead);
            }
		    //遍历向前移动
            pHead = pHead.next;
        }

        //最后,遍历listNodeDeque,组装成一个新的链表
        ListNode newHead = listNodeDeque.poll();
        ListNode tempHead = newHead;
        while (newHead != null) {
            newHead.next = listNodeDeque.poll();
            newHead = newHead.next;
        }
        return tempHead;
    }
}

#剑指offer#
全部评论

相关推荐

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

创作者周榜

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