
链表
少喝烫水
嘘!
展开
-
排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2020-08-07 23:42:07 · 344 阅读 · 0 评论 -
对链表进行插入排序
对链表进行插入排序对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例1:输入: 4->2->1->3输出原创 2020-08-04 19:07:49 · 193 阅读 · 0 评论 -
重排链表
重排链表给定一个单链表 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.思路:看示例就能看出来是头取一个,尾取一个,原谅我原创 2020-07-31 23:00:12 · 425 阅读 · 0 评论 -
复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[原创 2020-07-24 11:59:16 · 401 阅读 · 0 评论 -
反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。原创 2020-07-24 10:30:43 · 80 阅读 · 0 评论 -
分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5思路就是将给出的链表分成两个链表,一个全小于x,一个全大于等于x,最后将两个链表连接起来,以下ac代码:/** * Definition for singly-linked lis原创 2020-07-23 11:31:56 · 265 阅读 · 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->5->1->2->3->NULL示例 2:输入: 0->1->2->NU原创 2020-07-13 09:13:45 · 116 阅读 · 0 评论 -
两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路就……模拟?用了三个指针,时间O(n),空间O(1)首先考虑如何交换两个节点,假设第一个节点为node则:t = node->next //备份node的下一个节点node->next = node->next->next //让现原创 2020-07-10 18:39:30 · 100 阅读 · 0 评论 -
删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题意就是给出一个节点,然后让把这个节点在链表中删去,因为我们通常思维下删除一个节点都是直接让前一个指针的next指向下原创 2020-07-08 18:28:36 · 153 阅读 · 0 评论 -
反转链表(回溯,递归)
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。方法一:回溯假设一个链表 A -> B -原创 2020-07-06 16:27:49 · 473 阅读 · 1 评论 -
两数相加(链表)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://leetcode原创 2020-07-06 15:48:55 · 163 阅读 · 0 评论 -
移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-linked-list-elements著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。就正常的遍历思路,不过需要在前面插一个头结点,方便删除链表的第一个节原创 2020-07-04 18:01:03 · 108 阅读 · 0 评论 -
相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,原创 2020-07-04 17:02:53 · 131 阅读 · 0 评论 -
环形链表(快慢指针)
Given a linked list, determine if it has a cycle in it.To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the li原创 2020-07-04 15:11:06 · 344 阅读 · 0 评论 -
删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。需要注意的有三点:c原创 2020-07-02 21:00:17 · 139 阅读 · 0 评论 -
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4就……还是归并(不过用c又重写了一遍/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNod原创 2020-07-02 19:23:39 · 135 阅读 · 0 评论 -
删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:就和剑指offer上那道返回倒数第k个节点思路一样,不过这道题的返回变成了删除,所以更复杂一点创建两个指针pq,p先走,隔n+1个节点之后q再走,之所以是n+1,是因为删除第n个节点是要原创 2020-07-02 16:13:49 · 174 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。一开始还在想把一个链表插入到另一个链表中,后来发现实现很麻烦,再一想发现这不就是归并排序嘛,直接新建一个链表完事儿(还有边界条件里容易空指针,调试了一下才发现(/*public class ListNode { int val; ListNode next = null;...原创 2020-03-18 23:05:04 · 101 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Find...原创 2020-03-18 16:34:21 · 106 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路:假设一个链表 A -> B ->C,则反转后为 C -> B -> Anew两个新节点,一个pre为反转链表的表头,另一个tmp遍历当前链表用每当tmp指向新的节点时,执行以下操作:将tmp指向的下一节点备份改tmp指向prepre = tmptmp = 备份的下一节点/*public cl...原创 2020-03-18 12:49:42 · 99 阅读 · 0 评论