leetcode之链表
文章平均质量分 58
leetcode之链表
无名小飛猿
这个作者很懒,什么都没留下…
展开
-
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],[2,1]]示例 3:输入:hea原创 2021-04-01 22:51:00 · 51 阅读 · 0 评论 -
面试题 02.04. 分割链表
题目编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->10->5->5->8思路只要小于x在x的左边即可右边不管结果不唯一/**原创 2021-04-04 21:11:56 · 112 阅读 · 6 评论 -
24. 反转链表&&92. 反转链表 II
题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路链表为null直接返回nullpre当前节点的前驱节点cur当前节点循环cur当前节点为空退出:临时节点保存cur当前节点的后继节点cur,next=pre修改当前节点指向pre前驱节点pre=cur后移cur后移返回新链表pre前驱节原创 2021-03-21 19:30:48 · 77 阅读 · 0 评论 -
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 = []输出:[]思路- 迭代+拆分+归并按1 2 4…步长归并迭代拆分逐块归并,再将每一块拼接/** * Definiti原创 2021-04-04 20:06:03 · 66 阅读 · 0 评论 -
2. 两数相加&445. 两数相加 II
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2原创 2021-04-03 19:45:17 · 135 阅读 · 0 评论 -
61. 旋转链表
题目给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]题解闭合成环,并求链表长度len从head移动len-k%len-1次就是旋转链表的尾节点保存新链表的头结点防止丢弃拆分链表/** * Definition for singly-linked list. * pu原创 2021-04-01 07:28:22 · 99 阅读 · 0 评论 -
141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4], p原创 2021-03-31 22:19:58 · 105 阅读 · 0 评论 -
83. 删除排序链表中的重复元素&&82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列题解...原创 2021-03-30 22:35:27 · 58 阅读 · 0 评论 -
面试题 02.07. 链表相交
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 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 (注意,原创 2021-03-28 22:29:13 · 78 阅读 · 0 评论 -
203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]思路删除的一个或多个节点位于链表的头部时,就需要哨兵节点处理定义一个哨兵节点连接链表定义一个前原创 2021-03-27 23:03:50 · 69 阅读 · 0 评论 -
876. 链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = N原创 2021-03-27 22:34:49 · 57 阅读 · 0 评论 -
237. 删除链表中的节点
题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为原创 2021-03-27 22:22:17 · 54 阅读 · 0 评论 -
234. 回文链表
解快慢指针找中间节点然后翻转中间节点起始的后半部分链表再用双指针遍历比较值是否相等返回原链表找中间节点两个快慢指针slow和fast指向headfast每次走两步,slow每次走一步终止条件fast.next=null(奇数链表的结束)或fast.next.next=null(偶数链表的结束)反转链表三个指针当前节点cur,当前节点的后一个节点curNext,当前的节点前一个节点curPre开始反转cur指向curPre,全部后移终止条件cur不为空代码/**原创 2021-03-25 22:48:35 · 71 阅读 · 0 评论 -
52. 两个链表的第一个公共节点
题目输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 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,原创 2021-03-25 20:02:44 · 114 阅读 · 0 评论 -
21. 合并两个有序链表&&1669. 合并两个链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]/** * Definition for singly-linked list. * public class ListNode { * int val; *原创 2021-03-24 22:43:52 · 74 阅读 · 0 评论