链表
每天学一点!
时刻保持对知识的热情!
展开
-
删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路设置一个头结点,以免第一个结点重复情况。代码/*struct ListNode { int val; struct ...原创 2019-04-10 15:02:44 · 122 阅读 · 0 评论 -
两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。思路遍历的思想不说了。这道题主要是搞清楚什么叫第一个公共结点:第一个公共结点,即这个结点后的所有结点相等。也就是出现第一个公共结点后,从此结点开始到链表结尾,两链表的结点数量一致,结点内容也一致。例子:链表1:1 -> 2 -> 3 -> 4 -> 5链表2:3 -> 4 -> ...原创 2019-04-26 18:46:56 · 161 阅读 · 0 评论 -
leetcode24. 两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:1->2->3->4, 你应该返回2->1->4->3思路1递归。我提交的代码/** * Definition for singly-linked list. * st...原创 2019-05-17 13:41:47 · 118 阅读 · 0 评论 -
leetcode25. K 个一组翻转链表
题目妙速给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例给定这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回:...原创 2019-08-12 12:43:09 · 145 阅读 · 0 评论 -
leetcode109. 有序链表转换二叉搜索树
题目描述给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。示例给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / ...原创 2019-08-12 15:14:22 · 330 阅读 · 0 评论 -
leetcode143. 重排链表
题目描述给定一个单链表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->...原创 2019-08-12 16:40:40 · 247 阅读 · 0 评论 -
leetcode147. 对链表进行插入排序
题目描述对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位...原创 2019-08-12 17:51:57 · 133 阅读 · 0 评论 -
21.合并两个有序链表
题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例输入:1->2->4, 1->3->4输出:1->1->2->3->4->4代码1-迭代/** * Definition for singly-linked list. * struct ListN...原创 2018-11-14 20:41:35 · 135 阅读 · 0 评论 -
反转链表
题目描述反转一个单链表思路1-迭代假设链表为 1 -> 2 -> 3 -> nullptr反转后为3 -> 2 -> 1 -> nullptr(1)当遇到1时,将1->nullptr看成一个整体,提出来(2)当遇到2时,将1->nullptr这个整体放在2后面,形成一个新的整体,也就是2->1->nullpt...原创 2019-02-27 19:59:39 · 187 阅读 · 0 评论 -
链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路设置两个指针,一个快指针(走两步),一个慢指针(走一步)。如果能相遇则说明有环。判断有环后如果找到入口结点:让慢指针回到头结点,两个指针同时走(都走一步),相等时即为入口结点。代码/*struct ListNode { int val; struct Lis...原创 2019-04-03 18:54:44 · 112 阅读 · 0 评论 -
148. 排序链表
题目描述在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路因为要求时间复杂度,而排序...原创 2019-09-04 14:11:37 · 133 阅读 · 1 评论 -
234. 回文链表
题目描述请判断一个链表是否为回文链表。示例输入: 1->2->2->1输出: true思路因为进阶要求空间复杂度为O(1),时间复杂度为O(n),则不能用栈。用两个指针,一个快指针(走两步),一个慢指针(走一步)。当快指针走到末尾的时候,慢指针的位置就是中间位置,然后原地翻转后序链表。在遍历比较即可。代码/** * D...原创 2019-09-11 18:33:59 · 82 阅读 · 0 评论 -
leetcode61. 旋转链表
题目描述给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋...原创 2019-08-11 18:06:11 · 89 阅读 · 0 评论 -
leetcode82. 删除排序链表中的重复元素 II
题目描述给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3思路找到相同得一段结点删除...原创 2019-08-11 17:41:27 · 105 阅读 · 0 评论 -
leetcode83. 删除排序链表中的重复元素
题目描述给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3思路双指针。遍历一遍就可以了。代码/** * Definition for sin...原创 2019-08-11 16:56:01 · 92 阅读 · 0 评论 -
141/142. 环形链表/环形链表II
题目描述给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects t...原创 2019-07-29 08:09:47 · 117 阅读 · 0 评论 -
86. 分隔链表
题目描述给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5思路创建两个链表,链表min表...原创 2019-07-29 08:40:36 · 86 阅读 · 0 评论 -
138. 复制带随机指针的链表
题目描述给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。示例输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}解释:节点 1 的值是 ...原创 2019-07-29 09:25:51 · 80 阅读 · 0 评论 -
23. 合并K个排序链表
题目描述合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6思路1(1)将所有链表结点值放在一个容器中,时间复杂度0(N),空间复杂度为O(N...原创 2019-07-29 17:17:53 · 94 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路递归即可。也可以迭代。代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution ...原创 2019-02-28 21:37:43 · 117 阅读 · 0 评论 -
复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路1具体思路见我另外一篇博文:https://blog.csdn.net/songsong2017/article/details/88640641...原创 2019-03-18 19:41:24 · 102 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路中序排序。用一个指针保存前一个结点。代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2019-07-22 20:03:40 · 89 阅读 · 0 评论 -
206. 反转链表
题目描述反转一个单链表。示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路1迭代实现。遇到一个结点反转一次。代码1/** * Definition for singly-linked list. * struct ListNode ...原创 2019-07-27 16:14:07 · 69 阅读 · 0 评论 -
92. 反转链表 II
题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL思路举例链表为 【1 2 3 4 5】,m = 2, n = 4,也...原创 2019-07-28 12:18:40 · 104 阅读 · 0 评论 -
160. 相交链表
题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例输入: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输入解释:相交节点...原创 2019-07-28 16:01:34 · 79 阅读 · 0 评论 -
leetcode237. 删除链表中的节点
题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 --head =[4,5,1,9],它可以表示为:示例输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9...原创 2019-08-11 16:39:01 · 81 阅读 · 0 评论 -
2. 两数相加
题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&...原创 2019-01-25 16:22:22 · 146 阅读 · 0 评论