题意 找到单链表倒数第 n 个节点,保证链表中节点的最少数量为 n 。...样例 给出链表 3->2->1->5->null 和 n = 2,返回倒数第二个节点的值 1 思路1 一个简单的思路就是先将链表进行反转,然后在反转后的链表中,顺着找第 n 个元素即可。...例如对于 100 个元素的链表,查找倒数第 100 个,那么就等于将链表遍历了 2 次,效率很低。...改进思路: 设 2 个指针 p1, p2 先让指针 p2 指向顺数第 n 个元素,p1 指向原链表的头指针。...个节点
题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点 示例 给定一个链表: 1->2->3->4->5, 和 n = 2 当删除了倒数第二个节点后,链表变为 1->2->3->5 思考...你能尝试使用一趟扫描实现吗?...解法二 解法一已经实现了我们想要的功能,我们回看上面的思考(只扫描一趟实现此功能),我们看这个问题的本质,倒数第n个就等正数的第(len-n)+1个,我们看下图: ?...分析上面的图声明三个变量,one,two两个指针变量,i是一个int变量,one和two指向链表的头节点,one开始遍历链表,每遍历一个节点,变量i进行加1,当变量i大于n时(就是倒数第n个,在这里n是...} 好了,删除链表倒数第N个节点就分享到这里,有收获的帮忙关注,转发,点赞呗,非常感谢。
还经常要求第N个,例如第2个,第3个最大最小值 例如 我们知道了第一名分数是99 我们想知道第二名分数是多少 以知道他们的差距有多大 我们用Large和Small来求最大值和最小值 这是一对相反数 成对记起来更容易...Large(数据范围,想要的第N个最大值) 在我们的例子中 如果要求第二个最大值 公式就应该写为 为了帮你们识别 我把第1个最大值81 和 第2个最大值76 标识出来了 可以预见 第一个最大值的结果和...继续作死一下 我们在第2个参数的位置输入其他值试试 0和负数都会报错 Small(数据范围,想要的第N个最小值) 其实说了Large函数之后 这个完全就是一样的啊 因为 第一个最大值就是最后一个最小值...最后一个最大值就是第一个最小值 第n个最小值就是倒数第n个最大值 第n个最大值就是倒数第n个最小值 这是一组绕口令 期末要考!...╮(╯▽╰)╭ 好了 现在案例有11个数 我们现在用Small找到刚才的 最大值,第2个最大值,第3个最大值 假设你懒得数有多少个数字呢 结合之前说过的函数Count即可 传送门()()()()COUNT
删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...---- 解法一 先遍历一遍计算链表长度;再遍历一遍删除倒数第n个节点 ? 解法二:进阶 只遍历一遍链表,能否解决这个问题?...class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { assert(n >=...Palindrome Linked List 请判断一个链表是否为回文链表。
题目: 思路: 由于这是一个链表,所以我们一般只能获取到一个头结点,然而其他信息我们不确定。所以可以采用双指针的方法。...思路二,利用一个指针先走出目标数目,然后两个指针一起走,那么先走的指针走完时,第二个指针恰好会停在目标元素上。...n; i++) { p2 = p2.next; } //当指针p2走完n步以后,让指针p2和p1同时向前走,直到p2走到最后一个节点,即p2->...next=NULL // 整个过程p2和p1之间相隔n-1个节点 while (p2 !...= null) { p1 = p1.next; num++; } //判断是第几个节点 int index
题意 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 样例 给出链表 1->2->3->4->5->null 和 n = 2....删除倒数第二个节点之后,这个链表将变成 1->2->3->5->null. 思路 类似于 链表倒数第n个节点,先找到被删除节点的前节点,然后将前节点的 next 指向被删除节点的的 next 即可。...* @param n: An integer....preDelete.next = preDelete.next.next; return dummy.next; } } 原题地址 LintCode:删除链表中倒数第n...个节点
LeetCode第19题,中等难度,很经典的一道链表相关的题目。一个多月以前做的,当时一看就知道怎么写,结果代码总是差了点......,删除链表的倒数第 n 个节点,并且返回链表的头结点。...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...进阶: 你能尝试使用一趟扫描实现吗?...存在步差,且n1不为null,说明存在倒数第n个节点,此时n1是倒数第n个节点的前一个节点,将n1.next指向倒数n-1个节点即可 中文官网题解: https://leetcode-cn.com/problems
19.删除链表的倒数第N个节点 题目链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 给你一个链表,删除链表的倒数第...n 个结点,并且返回链表的头结点。...1 输出:[1] 思路 双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。...定义fast指针和slow指针,初始值为虚拟头结点,如图: ?...fast首先走n + 1步 ,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作),如图: ?
01 题目信息 题目地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 给定一个链表,删除链表的倒数第 n...进阶:你能尝试使用一趟扫描实现吗? 02 解法一:倒数转正数 很自然的是我只能通过头节点head多次的next,找到要被删除的节点,但我们获取的定位是倒数第几个。...通常都会在真正存储数据的链头之前加一个节点它的值和内容无关,用这个额外的节点来做真正的链表节点。 ?...它就是我们处理链表的经典方式快慢指针,我们用两个指针,快指针领先n次(倒数次数),慢指针在起点,同时迭代。当快指针到了终点,那慢指针岂不是到了倒数第n个。...fast起点可以取后一格那么slow就能拿到倒数第n个的前一个节点 ?
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 解:双指针,快慢指针,算链表的问题经常用到。...int x) { val = x; } * } */ class Solution { public ListNode removeNthFromEnd(ListNode head, int n)...{ ListNode slow = head; ListNode fast = head; for (int i = 0; i n; i++) {
删除链表的倒数第N个节点 链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例1 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点后,链表变为 1->2->3->5....解题思路 设置两个指针变量,中间隔N-1个元素,当后面的指针遍历完所有元素指向nil时,前面的指针就指向了想要删除的元素 type ListNode struct { Val int Next...n !...= nil { fast = fast.Next slow = slow.Next } // 最后一个节点指为空,然后返回head slow.Next = slow.Next.Next
题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗?...当A到达null的时候, 指针b的位置正好是倒数n 我们可以设想假设设定了双指针p和q的话,当q指向末尾的NULL,p与q之间相隔的元素个数为n时,那么删除掉p的下一个指针就完成了要求。...设置虚拟节点dummyHead指向head 设定双指针p和q,初始都指向虚拟节点dummyHead 移动q,直到p与q之间相隔的元素个数为n 同时移动p与q,直到q指向的为NULL 将p的下一个节点指向下下个节点...关键点解析 链表这种数据结构的特点和使用 使用双指针 使用一个dummyHead简化操作 代码 /* * @lc app=leetcode id=19 lang=javascript
LeetCode 题目: 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...方案: 构建双指针first与sec,first先走n步,然后一同运动,当first指向表尾,sec指向的next即是倒数第N个节点,删除即可(next指向next的next,这里的删除相当于跳过)。..., _ n: Int) -> ListNode? { var first = head for _ in 0..n { first = first?.
大概的内容:删除链表的倒数第N个节点,并返回链表的头节点。...个节点就是从开头数第(L-N+1)个节点,将此节点的next指向下下节点就可以了。...2、第一个指针节点向前移动N+1步,第二个指针保持不动,这时两个指针相隔N个节点的距离 3、同时移动两个指针保持恒定的距离,直到第一个指针到达最后一个节点。...4、这时第二个指针所指向的节点的下一个节点就是要删除的节点(倒数第N个节点),将第二个指针指向的节点的next指向下下个节点就完成了。 ?...,相当于指针在从尾节点执行到头节点,这时在第N步将指针指向的节点的next指向下下个节点就完成了。
学习Excel技术,关注微信公众号: excelperfect 在查找相匹配的值时,如果存在重复值,而我们想要获取指定的匹配值,那该如何实现呢?...如下图1所示的工作表,在“商品”列中,存在一些重复的商品,现在我们要找出第2次出现的“笔记本”的销售量。 ?...图1 我们知道VLOOKUP函数通常会返回找到的第一个匹配值,或者最后一个匹配值,详见《Excel公式技巧62:查找第一个和最后一个匹配的数据》。...然而,我们可以构造一个与商品相关的具有唯一值的辅助列(详见《Excel公式技巧64:为重复值构造包含唯一值的辅助列》),从而可以使用VLOOKUP函数来实现查找匹配值。...首先,添加一个具有唯一值的辅助列,如下图2所示。 ? 图2 在单元格B3中输入公式: =D3 & "-" &COUNTIF( 下拉至单元格B14。
哨兵节点,其实就是一个附加在原链表最前面用来简化边界条件的附加节点,它的值域不存储任何东西,只是为了操作方便而引入。...但是此时若是删除第一个元素的话,你就很难进行了,因为按道理来讲,此时第一个元素的前一个元素就是nil(空的),如果使用pre就会报错。那如果此时你设置了哨兵节点的话,此时的pre就是哨兵节点了。...下面我们看一道题目,看一下哨兵节点的应用 02、题目讲解 第19题:删除链表倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。...示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。...进阶: 你能尝试使用一趟扫描实现吗? 思路分析: 首先我们思考,让我们删除倒数第N个元素,那我们只要找到倒数第N个元素就可以了,那怎么找呢?我们只需要设置两个指针变量,中间间隔N-1元素。
学习Excel技术,关注微信公众号: excelperfect 在《Excel公式技巧65:获取第n个匹配的值(使用VLOOKUP函数)》中,我们构造了一个没有重复值的辅助列,从而可以使用VLOOKUP...函数来查找指定的重复值。...本文中仍然以此为例,使用INDEX函数来获取重复值中指定的值,但是不需要构造辅助列。 如下图1所示的工作表,在“商品”列中,存在一些重复的商品,现在我们要找出第2次出现的“笔记本”的销售量。 ?...-ROW(C3)+1),F6) 解析为: SMALL({1;FALSE;FALSE;FALSE;FALSE;6;FALSE;FALSE;FALSE;FALSE;11;12},2) 得到结果: 6 即要查找的商品第...代入INDEX函数中,得到: =INDEX(D3:D14,6) 结果为单元格D8中的值10。 如果使用定义的名称,那么公式将更灵活,如下图3所示。 ?
一、题目介绍 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2....二、解题思路 由于我们需要找到倒数第 n 个节点,因此我们可以使用两个指针 fast 和 slow同时对链表进行遍历,并且 fast 比 slow 超前 nn 个节点。...当 fast 遍历到链表的末尾时,slow就恰好处于倒数第 n 个节点。 具体地,初始时 fast和 slow均指向头节点。我们首先使用 fast 对链表进行遍历,遍历的次数为 n。...此时,fast 和 slow 之间间隔了 n-1个节点,即 fast 比 slow超前了 n个节点。 在这之后,我们同时使用fast 和 slow对链表进行遍历。...当fast遍历到链表的末尾(即 fast为空指针)时,slow 恰好指向倒数第 nn个节点。 如果我们能够得到的是倒数第 n 个节点的前驱节点而不是倒数第 n 个节点的话,删除操作会更加方便。
给定一颗二叉搜索树,请找到第k个节点 ''' 中序遍历 ''' class TreeNode: def __init__(self, x): self.val = x
题目传送门 方法一:计算链表长度(迭代) 1.计算链表长度,并且定义哑节点链接链表。 2.从哑节点开始前进length-n次。即为被删除节点的前置节点。 3.进行删除操作。...//定义一个虚拟节点,并且链接链表 ListNode dummy = new ListNode(0,head); ListNode cur = dummy;...head = head.next; } return length; } } 方法二:栈 在 Java 中,虽然有 Stack 类,但推荐使用...现代化的 API 1.定义一个虚拟节点,用来找到结果链表的头结点。 2.将链表节点全部入栈,包括虚拟节点。 3.出n次栈。也就是刚好把要删除节点出栈。 4.记录栈顶元素的地址。...也就是被删除节点的前置节点。 5.链接链表。将前置节点与后置节点链接起来。 6.返回虚拟节点的下一个节点。