LeetCode解法汇总83. 删除排序链表中的重复元素

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)

描述:

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

LeetCode解法汇总83. 删除排序链表中的重复元素_第1张图片

输入:head = [1,1,2]
输出:[1,2]

示例 2:

LeetCode解法汇总83. 删除排序链表中的重复元素_第2张图片

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解题思路:

使用set存储所有遍历过的节点,

如果set中有该值,则无需处理,说明重复。

如果set中无该值,则需要判断头节点是否为空,为空则设置为头节点,否则插入到尾节点的后面。

代码:

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        Set set = new HashSet<>();
        ListNode top = null;
        ListNode last = null;

        while (head != null) {
            ListNode next = head.next;
            if (!set.contains(head.val)) {
                set.add(head.val);
                if (top == null) {
                    top = head;
                } else {
                    last.next = head;
                }
                last = head;
                last.next = null;
            }
            head = next;
        }
        return top;
    }
}

你可能感兴趣的:(编程题,leetcode,算法,职场和发展)