zoukankan      html  css  js  c++  java
  • 刷题力扣面试题 02.01. 移除重复节点

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

    示例1:

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

    示例2:

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

    提示:

    • 链表长度在[0, 20000]范围内。
    • 链表元素在[0, 20000]范围内。

    进阶:

    • 如果不得使用临时缓冲区,该怎么解决?

    题目分析

    1. 根据题目描述,删除链表中重复的元素节点
    2. 使用哈希表记录出现过的节点元素
    3. 当元素没有出现过就插入哈希表,若出现过就从链表中删除

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeDuplicateNodes(ListNode* head) {
            if (!head || !head->next) {
                return head;
            }
            std::unordered_set<int> keySet;
            ListNode* p = head;
            ListNode* q = p->next;
            keySet.insert(p->val);
            while (p->next) {
                q = p->next;
                if (keySet.find(q->val) == keySet.end()) {
                    keySet.insert(q->val);
                    p = q;
                } else {
                    p->next = q->next;
                    delete q;
                }
            }
            return head;
        }
    };
    
  • 相关阅读:
    找细胞(题解)
    关于dfs
    奇怪的电梯(题解)
    信息解码(Message Decoding ACM/ICPC 1991)
    查找最大元素
    8皇后问题(dfs)
    如何利用dfs遍历树
    dfs(计算细胞数量)
    决策树减支问题(优化)dfs减支问题
    组合数问题
  • 原文地址:https://www.cnblogs.com/HanYG/p/15808956.html
Copyright © 2011-2022 走看看