链表
笔试面试中常考的链表算法
Code_Yilia
这个作者很懒,什么都没留下…
展开
-
【链表】LeetCode #61旋转链表
题目链接: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原创 2020-08-13 09:36:26 · 134 阅读 · 0 评论 -
【链表】LeetCode #24 两两交换链表中的节点
题目链接:LeetCode #24 两两交换链表中的节点题目描述:#24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.通过次数135,890 提交次数204,775分析:两两交换,如果是奇数,最后一位不动。如:1,2,3,4,5 交换后的结果应为 2,1,4,3,5方案如下:因为原创 2020-08-12 16:18:05 · 109 阅读 · 0 评论 -
【链表】LeetCode #2 两数相加(基于链表的两数相加,执行用时战胜 99.89%的Java提交)
题目链接:LeetCode #2 两数相加题目描述:#2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 8原创 2020-08-12 11:09:52 · 151 阅读 · 1 评论 -
【链表】LeetCode #反转链表(两种方法:迭代法、递归法)
题目链接:LeetCode #反转链表题目描述:#206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?通过次数295,766 提交次数422,186方法一:迭代法对于每个节点,需要做以下三步:保存当前节点的下一个节点 next;让当前节点 cur 指向前一个节点 pre;删除原创 2020-08-02 21:33:31 · 270 阅读 · 0 评论 -
【链表】LeetCode #203 移除链表元素
题目链接:LeetCode #203 移除链表元素题目描述:#203. 移除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5通过次数92,417 提交次数201,211分析:本题是道简单题,但是想一次就A还是有点儿不容易的。需要注意的有以下几点:要做删除操作,需要找到的是被删节点的前一个节点,这样只需让 i.next原创 2020-08-01 20:09:53 · 135 阅读 · 0 评论 -
【链表】LeeTCode #160 相交链表(双指针,时间复杂度O(m+n))
题目链接:LeeTCode #160 相交链表题目描述:#160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 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)。原创 2020-08-01 17:11:50 · 257 阅读 · 0 评论 -
【链表】LeetCode #141环形链表(快慢指针)
题目链接:LeetCode #141环形链表题目描述:#141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到原创 2020-08-01 15:33:51 · 139 阅读 · 0 评论 -
【链表】LeetCode #19 删除链表的倒数第N个节点(时间复杂度O(n),在所有Java提交中击败了100%的用户)
题目链接:LeetCode #19 删除链表的倒数第N个节点题目描述:#19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?通过次数205,209 提交次数524,857分析:这个题的难度在于如何在一趟原创 2020-07-30 11:08:46 · 197 阅读 · 0 评论 -
【链表】LeetCode #83 删除排序链表中的重复元素 (两种方法)
题目链接:LeetCode #83 删除排序链表中的重复元素题目描述:#83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3通过次数123,788 提交次数242,480方法一:直接对比当前结点的值 cur.val 与下一个结点的值 cur.next.val 是否相等,若相等原创 2020-07-30 10:21:37 · 183 阅读 · 0 评论 -
【链表】LeetCode #21 合并两个有序链表
题目链接:LeetCode #21 合并两个有序链表题目描述:#21. 合并两个有序链表(难度:简单)将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4通过次数325,435提交次数512,003分析:该题是链表题目中的基础题,太久没接触链表了,还是给自己绕了好久…定义两个指针 head、pre:初始化原创 2020-07-28 17:16:28 · 146 阅读 · 0 评论