题目链接:https://www.acwing.com/problem/content/86/ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *entryNod
206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 1
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], v
1、(LeetCode21)合并两个有序链表 链接:https://leetcode.cn/problems/merge-two-sorted-lists/ 题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 思路:这道题可以用递归来做,首先判断两个链表的首节点哪个比较小,
141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解法:我们使用三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。 在遍历的时候,做当前结点的尾结点和前一个结点的替换。 pytho
原题链接在这里:https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ 题目: You are given the head of a linked list, and an integer k. Return the head of the linked list after swapping the values of the kth node from the beginning and the kth
一、单链表数据结构定义 python版 class ListNode: def __init__(self, val, next_node = None): self.val = val self.next = next_node 2.C++版 struct ListNode { int value; ListNode *next; ListNode(int item, next = nullptr) {
MT8 奇数位丢弃 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 对于一个由 0..n 的所有数按升序组成的序列,我们要进行一些筛选,每次我们丢弃去当前所有数字中第奇数位个的数。重复这一过程直到最后剩下一个数。请求出最
题目 给你一个链表的头节点 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] 提示: 链表中节点的数目在范围 [0, 500] 内 -100 <= Node.val <= 100 0 <= k <= 2 * 10^9
牛客网高频算法题系列-BM14-链表的奇偶重排 题目描述 给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。 注意是节点的编号而非节点的数值。 原题目见:BM14 链表的奇偶重排 解法一:链表遍历(使用额外空间) 首先,判断如果链表为空或者只有1或2个
可以看出,《剑指Offer》-22是力扣-19的子问题 找到链表中倒数第K个节点 《剑指Offer》-22,一次遍历单向链表得到倒数第K个结点的方法 从1开始倒数,那么倒数第K个节点即是正数第N-K+1个节点 这里还是使用同向双指针的办法 pointer1/pointer2都初始化为指向0,pointer1先开始走而pointer2
加速输入输出 当碰到ACM模式下的笔试题,使用C++的cin和cout流,通常会比C原生scanf和printf慢很多。原因是C++为了兼容scanf和printf,做了很多设计。但通常而言,使用cin和cout会比scanf和printf顺手很多。为了兼顾感觉和效率,可以在代码中添加以下两行,关闭对C的兼容。此时,C++原生输入输
牛客网高频算法题系列-BM12-单链表的排序 题目描述 描述 原题目见:BM12 单链表的排序 解法一:数组排序 首先判断如果链表为空或者只有一个结点,则不需要排序,直接返回原链表。 否则,使用额外空间进行排序,处理过程如下: 首先遍历链表,将所有结点值暂存在一个List中; 然后,使用库函数将Li
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 方法一: 遍历,逐个摘下结点,头插到新链表 2、代码实现 package Q0299.Q0206ReverseLinkedList; import DataStructure.ListNode; public class Solution1 { /* 方法一: 遍历,逐个摘下结点,头插到新链表 */
描述 将给出的链表中的节点每k个一组翻转,返回翻转后的链表 如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样 你不能更改节点中的值,只能更改节点本身。 数据范围:0≤n≤2000 ,1≤k≤2000 ,链表中每个元素都满足0≤val≤1000 要求空间复杂度O(1),时间复杂度O(n) 例如: 给定的链表
牛客网高频算法题系列-BM10-两个链表的第一个公共结点 题目描述 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 原题目见:BM10 两个链表的第一个公共结点 解法
描述 将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。 例如: 给出的链表为1→2→3→4→5→NULL, m=2,n=4, 返回1→4→3→2→5→NULL. 数据范围: 链表长度0<size≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000 要求:时间复杂度O(n) ,空
牛客网高频算法题系列-BM9-删除链表的倒数第n个节点 题目描述 给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针 原题目见:BM9 删除链表的倒数第n个节点 解法一:双指针法 首先,考虑两种特殊情况: 如果原链表为空,直接返回null。 如果k不是正数,直接返回null。 否则,使用双
原题传送门 1. 题目描述 2. Solution 1 1、思路分析 删除,找前驱咯~ 2、代码实现 package Q0299.Q0203RemoveLinkedListElements; import DataStructure.ListNode; public class Solution { /* 删除,找前驱咯~ */ public ListNode removeElements(ListNode
需要注意的地方 选择的方法是以一支链表作为结果链,另一只加上去,这就要注意结果链比另一支短的情况,在相加的同时,我定义了一个 before 用来记录当前节点的前一个节点的指针,因为相加操作结束时,结果链节点指针是NULL,不便于将第二条链接上去。 两数相加 给你两个 非空 的链表,表示两个
牛客网高频算法题系列-BM8-链表中倒数最后k个结点 题目描述 描述:输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。 原题目见:BM8 链表中倒数最后k个结点 解法一:双指针法 首先,考虑两种特殊情况: 如果
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,
2095. 删除链表的中间节点 给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n = 1、2、3、4 和 5 的情况,中间节点的下
关键在于遍历链表时将结点next指针指向前一个结点。 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围:0≤n≤1000 要求:空间复杂度O(1),时间复杂度O(n)。 /* struct ListNode { int val; struct Lis