链表
链表的刷题部分
amor_1
这个作者很懒,什么都没留下…
展开
-
设计可以变更的缓存结构(LRU)
设计可以变更的缓存结构(LRU)描述设计一种缓存结构,该结构在构造时确定大小,假设大小为k,并有两个功能:set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值要求:1.set和get方法的时间复杂度为O(1)。2.某个key的set或者get操作一旦发生,认为这个key的记录成了最经常使用的3.当缓存的大小超过k时,...原创 2020-03-23 13:16:39 · 335 阅读 · 0 评论 -
判断一个链表是否为回文结构
判断一个链表是否为回文结构题目:给定一个链表的头节点head,请判断该链表是否为回文结构。例如:1->2->1,true.1->2->2->1,true.15->6->15,true.1->2->3,false.借用辅助数组:通过一个栈,先遍历一遍链表,将所有元素入栈,之后再遍历链表,并且和出栈的元素一一进行比较。其实没有必要将...原创 2019-08-02 14:32:56 · 438 阅读 · 1 评论 -
重排列表
重排列表描述给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, ...原创 2020-03-09 15:36:07 · 342 阅读 · 0 评论 -
环形链表
环形链表描述给定一个链表,判断链表中是否有环。思路和代码思路1:用一个哈希表,将每一个遍历到的节点加入哈希表中,如果遍历到节点已经出现在了哈希表中则证明有环.思路2:一个指针走一步,一个指针走两步,若有环,则两个指针必会相遇./** * Definition for singly-linked list. * struct ListNode { * int val; *...原创 2020-03-09 15:04:12 · 91 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制描述请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。思路和代码用一个map<Node*, Node*>来做对应节点之间的映射/*// Definition for a Node.class Node {public:...原创 2020-03-09 14:49:46 · 77 阅读 · 0 评论 -
K个一组反转链表
K个一组反转链表描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3...原创 2020-03-09 14:05:31 · 67 阅读 · 0 评论 -
两两交换链表中的节点
两两交换链表中的节点描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路和代码题目规定了不允许单纯改变节点内部的值,如果可以直接改变值,那么就会更容易.设置三个节点,pre表示要变换的两个节点的前一个...原创 2020-03-09 13:45:18 · 83 阅读 · 0 评论 -
删除链表中的倒数第N个节点
删除链表中的倒数第N个节点描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思路和代码1遍历一遍列表,求出列表的长度len判断是否len==n,若是,则head = head->next...原创 2020-03-09 13:05:41 · 186 阅读 · 0 评论 -
旋转链表
旋转链表描述给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4...原创 2020-03-09 12:33:36 · 86 阅读 · 0 评论 -
删除链表中的重复元素
删除链表中的重复元素描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路和代码pre指向没有重复的最后一个元素,判断若当前元素==pre->val,证明这是个重复元素若当前元素不等于...原创 2020-03-08 15:47:44 · 130 阅读 · 0 评论 -
分隔列表
分隔列表描述给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5思路和代码两个指针,一个left_cur链接链表中值...原创 2020-03-08 15:13:30 · 165 阅读 · 0 评论 -
反转链表
反转链表描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL头插法链表要注意很多细节,比如上面例子最后1的next要指向NULL,不然会无线循环,超时,还有很多细节需要注意。/** * Definit...原创 2020-03-08 11:36:08 · 80 阅读 · 0 评论 -
两数相加
两数相加描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...转载 2020-03-08 11:11:06 · 71 阅读 · 0 评论