![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode链表
PigyChan
谢谢你看我的博客
展开
-
PigyChan_LeetCode 430. 扁平化多级双向链表
430. 扁平化多级双向链表难度中等多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]原创 2020-10-29 22:06:06 · 141 阅读 · 0 评论 -
PigyChan_LeetCode 61. 旋转链表
61. 旋转链表难度中等给定一个链表,旋转链表,将链表每个节点向右移动 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->5->1->2->3->NULL示例 2:输入: 0->原创 2020-10-29 22:05:41 · 124 阅读 · 0 评论 -
PigyChan_LeetCode 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制难度中等请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输入:head = [[1,1],[2,1]]输出:[[1,1原创 2020-10-29 22:05:28 · 55 阅读 · 0 评论 -
PigyChan_LeetCode 445. 两数相加 II
445. 两数相加 II难度中等给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7在我看来这题的难点在于进位思路原创 2020-10-26 10:08:33 · 67 阅读 · 0 评论 -
PigyChan_LeetCode 24. 两两交换链表中的节点
24. 两两交换链表中的节点难度中等给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:* 链表中节点的数目在范围 [0, 100] 内* 0 <= Node.val <= 100思路1.0:(1)每遍历两个节点进行一次交换,原创 2020-10-26 10:08:26 · 69 阅读 · 0 评论 -
PigyChan_LeetCode 143. 重排链表
143. 重排链表难度中等给定一个单链表 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, 重新排列为 1->5->2->4->3.思路1.0:(1)使用栈来辅助原创 2020-10-29 22:05:18 · 117 阅读 · 0 评论 -
PigyChan_LeetCode 82. 删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II难度中等给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3思路1.0(已看题解):(1)通过两个指针判断相邻的两个节点值是否相同(2)如果存在重复则进行去重(3)设置bool变量判断两类 前后值不一原创 2020-10-29 22:05:11 · 68 阅读 · 0 评论 -
PigyChan_LeetCode 83. 删除排序链表中的重复元素
83. 删除排序链表中的重复元素难度简单给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路1.0:(1)通过两个指针判断相邻的两个节点值是否相同(2)如果存在重复则进行去重代码1.0:class Solution {public: ListNode* deleteDuplicates(Lis原创 2020-10-30 09:42:13 · 78 阅读 · 1 评论 -
PigyChan_LeetCode 109. 有序链表转换二叉搜索树
109. 有序链表转换二叉搜索树难度中等给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:思路1.0:将有序链表视为一个无限向右子树衍生的二叉树,那么这题就变为了:二叉树转变为平衡二叉树的问题。思路2.0(已看题解):快慢指针(1):通过快慢指针找到当前节点的中间节点,以该节点作为根节点(2):在中间节点的两侧链表中继续用快慢指针查找中间节点,并以此为根节点代码1.0原创 2020-10-28 09:59:47 · 250 阅读 · 0 评论 -
PigyChan_LeetCode 面试题 02.08. 环路检测
面试题 02.08. 环路检测难度中等给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:tail connects to node index原创 2020-10-28 09:59:40 · 80 阅读 · 0 评论 -
PigyChan_LeetCode 707. 设计链表
707. 设计链表难度中等设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:* get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。* addAtHead(val):在链表的第一个元素之前添加一个值为 val原创 2020-10-28 09:59:32 · 81 阅读 · 0 评论 -
PigyChan_LeetCode 2. 两数相加
2. 两数相加难度中等给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807(1)设置两根指针分别指向两链表头,以相同的原创 2020-10-28 09:59:24 · 67 阅读 · 0 评论 -
PigyChan_LeetCode 725. 分隔链表
725. 分隔链表难度中等给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:输入:ro原创 2020-10-28 09:59:14 · 72 阅读 · 0 评论