链表专题
文章平均质量分 56
链表笔试面试常考题型
百里守约学编程
你会的越多,不会的越多。
展开
-
链表相关思路总结
链表题的典型思路就是找到关键的结点,然后改变相关结点的指向即可。总结:如果要改变头结点的,如需要删除头结点时,则为了使操作所有结点的方式统一,我们会选择建立虚拟头结点dummy。快慢指针法:① 快指针一次走两步,慢指针一次走一步。② 快指针先走k步,然后快慢指针一起走。③ 上述两个策略相结合。头插法,尾插法等。61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->原创 2021-01-30 18:22:37 · 126 阅读 · 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]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <=原创 2021-01-29 20:14:48 · 81 阅读 · 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 · 117 阅读 · 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 · 176 阅读 · 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 · 109 阅读 · 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 · 62 阅读 · 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 · 88 阅读 · 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 · 67 阅读 · 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 · 64 阅读 · 0 评论 -
141.环形链表
141. 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,原创 2021-01-31 14:30:21 · 117 阅读 · 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 · 52 阅读 · 0 评论