题解 | #删除链表中重复的结点#(哈希表)

这篇具有很好参考价值的文章主要介绍了题解 | #删除链表中重复的结点#(哈希表)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

发现《剑指offer》里很多的链表题都是需要用到各种模板类,哈希模板类是高频出现的内容,学校里教到STL基本的类就结束了,甚至连vector这类神器都是一笔带过。。
话不多说,上代码

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
#include <unordered_map>
#include <utility>
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if(pHead==nullptr)
        {
            return nullptr;
        }
        ListNode* cur = pHead;
        unordered_map<int, int>key;
        
        while(cur!=nullptr)
        {
            key[cur->val]++;
            cur=cur->next;
        }

        ListNode* res = new ListNode(0);
        res->next = pHead;
        cur = res;

        while(cur->next!=nullptr)
        {
            if(key[cur->next->val]!=1)
            {
                cur->next = cur->next->next;
            }
            else {
                cur = cur->next;
            }
        }
        return res->next;


        
    }
};

这题的核心思路就是利用哈希表中,可以使用值去查找内容的特性来找。
实际上大一刷ACM时也刷到过类似题目不过当然不是链表。一般是类似于给一组数,然后看某一数(例如5)出现了几次。那时候的想法就是

int a[100000] = {0};
for i to n:
	a[i]++;
cout<<a[key]<<endl;

当时还是觉得挺ok的,不过实际上会发现开个a[100000]这个数组,内存直接浪费。去面试这么写,绝对被鄙视(似乎我在某个交流平台下面看到过有人吐槽过新人的写代码能力)这类模板的使用至少不至于看的像个C++菜鸟。

在 unordered_map<int, int> 中,第一个 int 表示键的类型,而第二个 int 表示值的类型。

具体解释如下:

第一个 int:表示键的类型。在 unordered_map 中,键是用于唯一标识和访问元素的对象。在此示例中,键的类型为整数(int)。

第二个 int:表示值的类型。值是与每个键相关联的数据。在此示例中,值的类型也为整数(int)。

因此,unordered_map<int, int>
是一个将整数作为键和值的无序键值对存储结构。您可以根据实际需要,选择不同的类型作为键和值,以满足特定的应用场景。——chatGPT
一般来说,键的类型应该是能够提供唯一性并支持哈希函数计算的类型。常见的键的类型包括但不限于以下几种:

整数类型(如 int, long, unsigned int 等) 字符串类型(如 std::string, const char* 等)
枚举类型(如自定义的枚举类型) 自定义类/结构体(需要提供自定义的哈希函数和相等比较函数)
选择键的类型时,需要根据实际的数据和使用需求来决定。确保选择的类型能够满足对键唯一性和哈希函数计算的要求,并能够正确进行比较和查找操作。

需要注意的是,如果您使用自定义的类或结构体作为键的类型,就需要提供适当的哈希函数和相等比较函数来让 unordered_map 正确地进行元素查找和存储

也就是说也可以利用此类容器去存放字符串/指定类/指定结构体文章来源地址https://www.toymoban.com/news/detail-519389.html

到了这里,关于题解 | #删除链表中重复的结点#(哈希表)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 删除有序链表中重复的元素-II(链表)

    乌!蒙!山!连!着!山!外!山!  双指针,slow和fast,并且增加标记flag初始为1。 如果slow指向节点值 等于 fast指向节点值,fast向后走,flag置为0; 如果slow指向节点值 不等于 fast指向节点值,观察 flag的值若为0 ,slow指向fast,fast向后走,flag置为1,然后continue;观察 flag的

    2024年02月11日
    浏览(42)
  • leetcode-删除排序链表中的重复元素

    83. 删除排序链表中的重复元素 题解: 要删除一个已排序链表中的所有重复元素,从而使每个元素只出现一次,我们可以使用一个指针来遍历这个链表,同时比较当前节点和它下一个节点的值。如果它们相等,我们就删除下一个节点,如果不相等,我们就移动指针。 注:本题

    2024年02月02日
    浏览(51)
  • 【代码随想录 | Leetcode | 第六天】链表 | 反转链表 | 两两交换链表中的节点 | 删除链表的倒数第 N 个结点

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来反转链表、两两交换链表中的节点和删除链表的倒数第N个节点的分享 ✨ ✨题目链接点这里 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 示例 2: 示例 3: 提示: 链表中节点的数

    2024年02月16日
    浏览(58)
  • LeetCode - #83 删除排序链表中的重复元素

    我们社区陆续会将顾毅( Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。 )的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新了 82 期,我们会保持更新时间和进度( 周一、周三、周五早上 9:00 发布 ),每期的内容不多,

    2024年02月10日
    浏览(46)
  • 【LeetCode】83. 删除排序链表中的重复元素

    思路 由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。 从指针 cur 指向链表的头节点,随后开始对链表进行遍历。如果当前 cur 与 cur.next 对应的元素相同,那么我们就将 cur.next 从链表

    2024年02月09日
    浏览(40)
  • 82. 删除排序链表中的重复元素 II

    给定一个已排序的链表的头  head  ,  删除原始链表中所有重复数字的节点,只留下不同的数字  。返回  已排序的链表  。 示例 1: 示例 2: 提示: 链表中节点数目在范围  [0, 300]  内 -100 = Node.val = 100 题目数据保证链表已经按升序  排列 题解: code:

    2024年02月01日
    浏览(48)
  • 【LeetCode刷题-链表】--82.删除排序链表中的重复元素II

    由于链表是排好序的,所以只需要对其进行一次遍历即可,比较相邻节点对应的值

    2024年02月06日
    浏览(41)
  • 算法刷题Day4 两两交换链表中的节点+删除链表的倒数第N个结点+链表相交+环形链表

    使用dummy节点可以极大地简化过程 有个地方折磨了我有一会儿,是粗心导致的,而且提示的错误也很难发现是哪里导致的。就是在case为 head = [1], n = 1 时,最后释放了 tmp 之后(此时 tmp 刚好指向 head ,我还 return head; ,意思就是操作了已经被我释放的内存, leetcode 就报错了

    2024年02月09日
    浏览(49)
  • LeetCode.82 删除排序链表中的重复元素 二

    LeetCode.82 删除排序链表中的重复元素 二 题目 思路: 1,提供的是无空头链表,需要加一个头结点来统一操作 2,使用三个工作指针 r:记录前一个节点,方便删除操作 p:记录此基准节点 q:前进节点 两种情况: 一 如果p与q不同,则p,q,r,均前进; 二 如果p与q相同,则q前进,

    2024年01月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包