![](https://img-blog.csdnimg.cn/20210129223619100.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
链表专题
文章平均质量分 56
链表笔试面试常考题型
百里守约学编程
你会的越多,不会的越多。
展开
-
链表相关思路总结
链表题的典型思路就是找到关键的结点,然后改变相关结点的指向即可。 总结: 如果要改变头结点的,如需要删除头结点时,则为了使操作所有结点的方式统一,我们会选择建立虚拟头结点dummy。 快慢指针法: ① 快指针一次走两步,慢指针一次走一步。 ② 快指针先走k步,然后快慢指针一起走。 ③ 上述两个策略相结合。 头插法,尾插法等。 61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->原创 2021-01-30 18:22:37 · 129 阅读 · 0 评论 -
19.删除链表的倒数第N个结点
19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 **进阶:**你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head = [1,2], n = 1 输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <=原创 2021-01-29 20:14:48 · 83 阅读 · 2 评论 -
237.删除链表中的节点
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-01-29 21:00:44 · 128 阅读 · 0 评论 -
83.删除排序链表中的重复元素
83. 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路: 由于链表已经排好序,故相同的元素是挨在一起的,且每个元素是可以出现一次的,故我们可以定义一个cur指向当前结点,然后遍历链表,当cur.val=cur.next.val时,删除后一个结点,否则cur后移即可。如图 Jav原创 2021-01-29 22:00:57 · 189 阅读 · 0 评论 -
82.删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例 2: 输入: 1->1->1->2->3 输出: 2->3 思路: 我们要把当前为某个值的前一结点preNode记录下来,和后面值比当前结点的值大的结点相连,详细思路写在了代码对应的位置更容易看懂。 /** *原创 2021-01-29 22:30:53 · 115 阅读 · 0 评论 -
206.反转链表
206. 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 思路: 头插法。共三个关键结点,如图: Java代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * L原创 2021-01-30 20:31:01 · 69 阅读 · 0 评论 -
92.反转链表 II
92. 反转链表 II 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 思路: 先找到第m个结点的前一个结点pre,用于连接反转部分的首结点,它的下一节点就是206题反转链表中的tail,用于连接反转部分和未反转部分。各关键结点如图所示。 反转后各关键结点位置如原创 2021-01-30 21:58:32 · 96 阅读 · 0 评论 -
24.两两交换链表中的节点
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 **进阶:**你能在不修改链表节点值的情况下解决这个问题原创 2021-01-30 19:46:06 · 71 阅读 · 0 评论 -
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)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链原创 2021-01-30 22:34:09 · 67 阅读 · 0 评论 -
141.环形链表
141. 环形链表 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 示例 1: 输入:head = [3,原创 2021-01-31 14:30:21 · 122 阅读 · 0 评论 -
142. 环形链表 II
142. 环形链表 II 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 **说明:**不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表原创 2021-01-31 14:44:53 · 57 阅读 · 0 评论