![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
文章平均质量分 69
链表
Sophia_fez
干啥啥不行,可爱第一名.jpg
展开
-
leetcode *148. 排序链表(归并排序)(2020.11.21)
【题目】*148. 排序链表 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 示例 1: 输入:head = [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head = [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目在范围 [0, 5 * 10^4] 内 -10^5 <=原创 2020-11-21 11:27:43 · 157 阅读 · 0 评论 -
leetcode *328. 奇偶链表(2020.11.13)
【题目】*328. 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 示例 1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2: 输入: 2->1->3->原创 2020-11-13 09:18:54 · 126 阅读 · 0 评论 -
leetcode *143. 重排链表(2020.10.20)
【题目】*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】双端队列 cl原创 2020-10-20 10:40:03 · 150 阅读 · 0 评论 -
leetcode *19. 删除链表的倒数第N个节点(2020.10.18)
【题目】*19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 【解题思路1】快慢指针 class Solution { public ListNode removeNthFromEnd(ListNode原创 2020-10-18 12:30:54 · 184 阅读 · 0 评论 -
leetcode *142. 环形链表 II(2020.10.10)
【题目】*142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head原创 2020-10-10 10:58:11 · 131 阅读 · 0 评论 -
leetcode *2. 两数相加(模拟十进制加法,模板)(2020.10.4)
【题目】*2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 【解题思路1】模拟十进制加法 class原创 2020-10-04 09:22:22 · 269 阅读 · 0 评论 -
leetcode *剑指 Offer 35. 复杂链表的复制 & *138. 复制带随机指针的链表(2021.7.22)
【题目】*剑指 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原创 2020-09-23 00:05:31 · 209 阅读 · 0 评论 -
leetcode 141. 环形链表(2020.10.9)
【题目】 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:...原创 2020-03-25 16:52:00 · 155 阅读 · 0 评论 -
leetcode 剑指 Offer 25. 合并两个排序的链表 & 21. 合并两个有序链表(2020.5.1)
【题目】 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 【解题思路1】 新建一个头结点,比较l1和l2的结点值将小的插入到新链表中,并后移,循环直到l1或者l2为空;若循环结束后一个为空另一个不为空,不为空...原创 2020-02-19 21:12:45 · 204 阅读 · 0 评论 -
leetcode 剑指 Offer 06. 从尾到头打印链表
【题目】面试题06. 从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10000 【解题思路1】栈 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int原创 2020-06-10 12:43:04 · 163 阅读 · 0 评论 -
leetcode 剑指 Offer 52. 两个链表的第一个公共节点 & 160. 相交链表 & 面试题 02.07. 链表相交(双指针)
【题目】 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 ...原创 2020-03-25 17:16:41 · 219 阅读 · 0 评论 -
leetcode 234. 回文链表(2020.10.23) & 面试题 02.06. 回文链表(快慢指针)
【题目】234. 回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 【解题思路1】快慢指针+翻转 使用快慢指针找到中间的位置,如果是奇数个元素,中间元素归前半部分, 对后半部分翻转,并且最后将链表恢...原创 2020-04-02 17:25:34 · 248 阅读 · 0 评论 -
leetcode 剑指 Offer 22. 链表中倒数第k个节点 & 面试题 02.02. 返回倒数第 k 个节点(快慢指针)
【题目】面试题 02.02. 返回倒数第 k 个节点 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 k = 2 输出: 4 说明: 给定的 k 保证是有效的。 【解题思路1】快慢指针 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne原创 2020-05-29 11:03:00 · 237 阅读 · 0 评论 -
leetcode 面试题 02.01. 移除重复节点(2020.6.26)
【题目】面试题 02.01. 移除重复节点 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 提示: 链表长度在[0, 20000]范围内。 链表元素在[0, 20000]范围内。 进阶: 如果不得使用临时缓冲区,该怎么解决? 【解题思路1】Set + 双指针 /** * Definition for singly-linked lis原创 2020-05-29 10:53:53 · 241 阅读 · 0 评论 -
leetcode 1290. 二进制链表转整数
【题目】1290. 二进制链表转整数 给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 输入:head = [1,0,1] 输出:5 解释:二进制数 (101) 转化为十进制数 (5) 示例 2: 输入:head = [0] 输出:0 示例 3: 输入:head = [1] 输出:1 示例 4: 输入:head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]原创 2020-05-20 13:56:44 · 223 阅读 · 0 评论 -
leetcode *24. 两两交换链表中的节点(2020.10.13) & **25. K 个一组翻转链表(2020.5.16)
【题目】**25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不原创 2020-05-16 14:47:01 · 157 阅读 · 0 评论 -
leetcode 83. 删除排序链表中的重复元素
【题目】 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 【解题思路1】 简单的有序链表操作 /** * Definition for singly-linked list. * public c...原创 2020-03-13 23:24:32 · 114 阅读 · 0 评论 -
leetcode **23. 合并K个升序链表(2020.4.26)
【题目】**23. 合并K个排序链表 21.合并两个有序链表 **23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6 【解题思路1】暴力法 转化...原创 2020-04-26 15:48:11 · 229 阅读 · 0 评论 -
leetcode *445. 两数相加 II(模拟十进制加法)(2020.4.14)
【题目】445. 两数相加 II 66. 加一 67. 二进制求和 415. 字符串相加 989. 数组形式的整数加法 445. 两数相加 II 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的...原创 2020-04-14 15:11:57 · 318 阅读 · 0 评论 -
leetcode 剑指 Offer 18. 删除链表的节点 & 237. 删除链表中的节点 & 面试题 02.03. 删除中间节点
【题目】237. 删除链表中的节点 203. 移除链表元素 【解题思路1】 后继结点的值覆盖掉要删除元素的值,最后再将重复元素断链 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { va...原创 2020-04-02 16:54:47 · 224 阅读 · 1 评论 -
leetcode *147. 对链表进行插入排序(2020.11.20)
【题目】 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 ...原创 2020-03-31 16:16:17 · 285 阅读 · 0 评论 -
leetcode 剑指 Offer 24. 反转链表 & 206. 反转链表(2020.3.2)
【题目】 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 【解题思路1】 遍历结点修改指针 /** * Definition for singly-linked list. * public cl...原创 2020-03-28 21:55:56 · 185 阅读 · 0 评论