牛客网高频算法题系列-BM16-删除有序链表中重复的元素-II

2022-10-04
阅读 2 分钟
1.6k
首先,考虑特殊情况,如果链表为空或者只有一个结点,不会有重复的元素,返回原链表。否则,遍历链表判断是否有重复元素,处理过程如下:首先,因为头结点也可能重复,所以使用一个虚拟头结点dummyNode;然后,用lastNonRedundantNode为上一个不重复的结点,初始化为头结点,count记录该结点的元素的重复次数,初始为1;...
封面图

牛客网高频算法题系列-BM15-删除有序链表中重复的元素-I

2022-06-08
阅读 2 分钟
1.8k
首先,考虑特殊情况,如果链表为空或者只有一个结点,不会有重复的元素,返回原链表。否则,遍历链表结点,判断是否有重复的元素,处理过程如下:使用pre记录上一个未重复的结点,初始化为链表头;然后从链表的第二个结点next开始遍历链表结点;如果next和pre的值相同,则删除当前重复结点;如果next和pre的值不相同,则...
封面图

牛客网高频算法题系列-BM14-链表的奇偶重排

2022-06-07
阅读 3 分钟
1.4k
首先,判断如果链表为空或者只有1或2个结点,不用重排,直接返回原链表。否则,使用2个list额外记录奇数和偶数位的结点,处理过程如下:遍历链表,分别将奇数和偶数位的结点值放到不同的list中;按照奇数位在前、偶数位在后的顺序,将2个list中的值重组成新的链表即为重排后的链表,返回之。
封面图

牛客网高频算法题系列-BM13-判断一个链表是否为回文结构

2022-06-06
阅读 2 分钟
1.5k
首先,考虑特殊情况,如果链表为空或只有一个链表,默认是回文结构,直接返回true。否则,使用一个额外的list进行处理,处理过程如下:遍历原链表,将链表中所有结点的值添加到一个list中;遍历list中的值判断该链表是否是回文结构,遍历过程如下:遍历list中0-list.size()/2的值;判断i的值和list.size() - i - 1的值是...
封面图

牛客网高频算法题系列-BM12-单链表的排序

2022-06-05
阅读 3 分钟
1k
首先判断如果链表为空或者只有一个结点,则不需要排序,直接返回原链表。否则,使用额外空间进行排序,处理过程如下:首先遍历链表,将所有结点值暂存在一个List中;然后,使用库函数将List排序(也可以使用各种排序算法进行排序);最后,将排序后的结点值构造成新的链表并返回。
封面图

牛客网高频算法题系列-BM10-两个链表的第一个公共结点

2022-06-03
阅读 2 分钟
1.4k
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)原题目见:BM10 两个链表的第一个公共结点
封面图

牛客网高频算法题系列-BM9-删除链表的倒数第n个节点

2022-06-02
阅读 2 分钟
1.4k
首先,考虑两种特殊情况:如果原链表为空,直接返回null。如果k不是正数,直接返回null。否则,使用双指针求解,求解过程如下:因为有可能删掉头结点,所以先设置一个假的头结点dummyNode,并指向原有的头结点;然后,遍历链表,将fast结点指向第n-1个结点;如果遍历完后fast为null或者fast的next为空,说明链表长度小于...
封面图

牛客网高频算法题系列-BM8-链表中倒数最后k个结点

2022-06-01
阅读 2 分钟
1.8k
描述:输入一个长度为 n 的链表,设链表中的元素的值为 a~i~ ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。原题目见:BM8 链表中倒数最后k个结点
封面图

牛客网高频算法题系列-BM7-链表中环的入口结点

2022-05-31
阅读 2 分钟
1.4k
使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。如果相遇了,从相遇处到入口结点的距离与头结点与入口结点的距离相同。所以将fast重新设置为头结点,fast和sow结点都一步...
封面图

牛客网高频算法题系列-BM6-判断链表中是否有环

2022-05-30
阅读 2 分钟
1.4k
使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。原理可参考:双指针算法原理详解
封面图

牛客网高频算法题系列-BM5-合并k个已排序的链表

2022-05-29
阅读 2 分钟
1.4k
分治法,可以将大问题分解成小问题,然后继续分解成最小的子问题并解决之。具体处理过程如下,将k个链表分解成2部分处理,递归处理这2部分,并调用 BM4 合并两个排序的链表 中的方法将2个合并好的链表进行合并,最小的子问题的条件是:没有待合并的链表,直接返回空。如果只有一个链表,则不需要合并,直接返回该链表。...
封面图

牛客网高频算法题系列-BM4-合并两个排序的链表

2022-05-28
阅读 2 分钟
1.3k
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0 <= n <= 1000,-1000 <= 节点值 <= 1000要求:空间复杂度 O(1),时间复杂度 O(n)原题目见:BM4 合并两个排序的链表
封面图

牛客网高频算法题系列-BM3-链表中的节点每k个一组翻转

2022-05-27
阅读 2 分钟
1.3k
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。原题目见:BM3 链表中的节点每k个一组翻转
封面图

牛客网高频算法题系列-BM2-链表内指定区间反转

2022-05-26
阅读 2 分钟
2.2k
因为起始位置可能是头结点,所以首先设置一个虚拟的头结点dummyNode并将next指向原有的头结点,然后处理过程如下:首先遍历链表,找到起始位置m的前一个结点pre,用来记录反转前的结点;然后用cur和next记录pre的next结点,用next记录cur的next结点;然后继续遍历链表,通过交换pre、next、cur的next指针,将next结点转...
封面图

牛客网高频算法题系列-BM1 反转链表

2022-05-25
阅读 2 分钟
1.2k
首先,如果head为空或者只有一个结点,直接返回。否则,分别用first和next指针指向链表的前两个结点,并将它们的next指针域反转,然后继续往后遍历处理链表的后续结点直到将最后一个结点反转。注意,需要将head头结点的next指向null。最后,返回first结点,即为反转后的新链表的头结点。
封面图

JZ-069-在 O(1) 时间内删除链表节点

2022-02-23
阅读 2 分钟
1.4k
在 O(1) 时间内删除链表节点。方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。题目链接: [在 O(1) 时间内删除链表节点]()
封面图

LeetCode-147-对链表进行插入排序

2022-01-23
阅读 2 分钟
1.9k
题目描述:对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每...
封面图

LeetCode-143-重排链表

2022-01-21
阅读 2 分钟
2k
题目描述:给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例说明请见LeetCode官网。来源:力扣(LeetCode) 链接:[链接] 著作权归领扣网络所有。商业转载请联...
封面图

LeetCode-142-环形链表 II

2022-01-20
阅读 2 分钟
1.6k
题目描述:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表...
封面图

LeetCode-138-复制带随机指针的链表

2022-01-18
阅读 3 分钟
1.7k
题目描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表...
封面图

JZ-056-删除链表中重复的结点

2022-01-14
阅读 2 分钟
3.4k
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。题目链接: 删除链表中重复的结点
封面图

JZ-055-链表中环的入口结点

2022-01-13
阅读 2 分钟
1.8k
链表中环的入口结点题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题目链接: 链表中环的入口结点代码 {代码...} 【每日寄语】 生活总有不期而遇的温暖和生生不息的希望,无论什么时候都要眼看前方,满怀希望就会所向披靡。
封面图

JZ-036-两个链表的第一个公共结点

2021-12-25
阅读 1 分钟
1.5k
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)题目链接: 两个链表的第一个公共结点
封面图

JZ-026-二叉搜索树与双向链表

2021-12-15
阅读 1 分钟
2.2k
二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目链接: 二叉搜索树与双向链表代码 {代码...} 【每日寄语】 悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
封面图

JZ-025-复杂链表的复制

2021-12-14
阅读 2 分钟
1.8k
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目链接: 复杂链表的复制
封面图

JZ-016-合并两个排序的链表

2021-12-05
阅读 2 分钟
1.7k
合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目链接: 合并两个排序的链表代码 {代码...} 【每日寄语】 无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持。
封面图

JZ-015-反转链表

2021-12-04
阅读 2 分钟
1.9k
反转链表题目描述输入一个链表,反转链表后,输出新链表的表头。题目链接: 反转链表代码 {代码...} 【每日寄语】 生活的本质就是幸福的活着,而生活的智慧就是活出自己想要的样子。
封面图

LeetCode-114-二叉树展开为链表

2021-11-20
阅读 2 分钟
1.9k
题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。示例说明请见LeetCode官网。来源:力扣(LeetCode) 链接:[链接] 著作权归领扣网络所有。商业...
封面图

JZ-003-从尾到头打印链表

2021-10-23
阅读 2 分钟
1.9k
从尾到头打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题目链接: 从尾到头打印链表代码 {代码...} 【每日寄语】 方向对了,就不怕路远。坚持不仅是一种品质,也是一种信念。
封面图

LeetCode-237-删除链表中的节点

2021-09-11
阅读 1 分钟
1.8k
题目描述:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点。示例说明请见LeetCode官网。来源:力扣(LeetCode) 链接:[链接] 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
封面图