随笔分类 -  链表

摘要:给定一个单链表 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- 阅读全文
posted @ 2019-07-30 23:32 YF-1994 阅读(152) 评论(0) 推荐(0)
摘要:class LRUCache { public: struct Node{ int key; Node *pre, *next; Node(int x):key(x),pre(NULL),next(NULL){} }; int tot, c; Node *head, *tail; unordered_map>... 阅读全文
posted @ 2019-07-29 19:31 YF-1994 阅读(639) 评论(0) 推荐(0)
摘要:算法实现:自底向上的归并排序 阅读全文
posted @ 2019-07-25 11:38 YF-1994 阅读(1434) 评论(0) 推荐(0)
摘要:给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 算法:我们每次在遍历的时候,先找到当前结点左子树最右下角的结点,然后让该结点指向当前结点的右子树,然后让当前结点的右指针指向当前结点的左子树,最后 阅读全文
posted @ 2019-07-10 23:15 YF-1994 阅读(165) 评论(0) 推荐(0)
摘要:给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 L 阅读全文
posted @ 2019-07-10 11:00 YF-1994 阅读(134) 评论(0) 推荐(0)
摘要:给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 阅读全文
posted @ 2019-07-10 10:54 YF-1994 阅读(256) 评论(0) 推荐(0)
摘要:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么 阅读全文
posted @ 2019-07-10 10:51 YF-1994 阅读(111) 评论(0) 推荐(0)
摘要:反转一个单链表。 示例: 阅读全文
posted @ 2019-07-10 10:48 YF-1994 阅读(173) 评论(0) 推荐(0)
摘要:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5算法:我们每次将链表中的结点与目标值比较时,记录下当前结点的前驱结点,便于我们操作。 阅读全文
posted @ 2019-07-10 10:30 YF-1994 阅读(107) 评论(0) 推荐(0)
摘要:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。 示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of 阅读全文
posted @ 2019-07-10 10:22 YF-1994 阅读(149) 评论(0) 推荐(0)
摘要:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5算法:归并排序(且只能归并排序,因为题目做了要求)。我们依据归并排序的思想。将 阅读全文
posted @ 2019-07-10 10:14 YF-1994 阅读(287) 评论(0) 推荐(0)
摘要:对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代 阅读全文
posted @ 2019-07-10 10:05 YF-1994 阅读(195) 评论(0) 推荐(0)
摘要:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。 示例 1:输入:head = [3,2,0,-4 阅读全文
posted @ 2019-07-10 09:47 YF-1994 阅读(208) 评论(0) 推荐(0)
摘要:将一个二叉搜索树就地转化为一个已排序的双向循环链表。可以将左右孩子指针作为双向循环链表的前驱和后继指针。为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点 阅读全文
posted @ 2019-07-10 09:37 YF-1994 阅读(768) 评论(0) 推荐(0)
摘要:给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到 阅读全文
posted @ 2019-07-09 23:46 YF-1994 阅读(128) 评论(0) 推荐(0)
摘要:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 示例: 输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{" 阅读全文
posted @ 2019-07-09 23:40 YF-1994 阅读(376) 评论(0) 推荐(0)
摘要:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [-10, -3, 0, 5, 9], 一个可能的答案是:[0, -3, 9, -10, null, 5], 阅读全文
posted @ 2019-07-09 23:24 YF-1994 阅读(237) 评论(0) 推荐(0)
摘要:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明:1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL 算法:我们先反转中间(2->3->4==>4->3->2),再把剩余两 阅读全文
posted @ 2019-07-09 23:07 YF-1994 阅读(165) 评论(0) 推荐(0)
摘要:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5 算法:类似于merge操作。我们 阅读全文
posted @ 2019-07-09 22:51 YF-1994 阅读(96) 评论(0) 推荐(0)
摘要:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2输出: 1->2示例 2: 输入: 1->1->2->3->3输出: 1->2->3 算法:直接删除 阅读全文
posted @ 2019-07-09 22:41 YF-1994 阅读(159) 评论(0) 推荐(0)