首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

漫画:如何找到链表的倒数第n个结点?

我们以下面这个链表为例: 给定链表的头结点,但并不知道链表的实际长度,要求我们找到链表的倒数第n个结点。 假设n=3,那么要寻找的结点就是元素1: 如何利用队列呢?...小灰的思路如下: 1.创建一个长度为n的队列,遍历原始链表,让结点逐一进入队列: 2.当队列已满时,让队尾元素出队,新结点入队: 3.当链表全部结点遍历完毕时,队尾的元素就是倒数第n个结点(因为队列长度是...n): 首先,我们创建两个指针P1和P2,P1指向链表的头结点,P2指向链表的正数第n个结点(也就是例子中的第3个结点): 接下来,我们让指针P1和P2同时循环右移,每次右移一步,直到指针P2移动到链表的末尾...: 此时,由于P2指向链表的尾结点,且P1和P2的距离是n-1,因此P1所指的结点就是我们要寻找的链表倒数第n个结点: 显然,这个方法从头到尾只需要对链表做一次遍历,而且仅仅使用了两个指针,算法的空间复杂度是...head; Node p2 = head; //把p2指针移动到正数第n个结点 for(int i=1; in; i++){ p2

83840
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    链表-如何高效删除链表的倒数第N个节点

    题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点 示例 给定一个链表: 1->2->3->4->5, 和 n = 2 当删除了倒数第二个节点后,链表变为 1->2->3->5 思考...= nil{ len++W temp1 = temp1.Next } //倒数第n个就等正数的第(len-n)+1个 m := len- n...return head } for i:=0; i<=len-1;i++{ //找到要删除节点的上一个节点 //将这个节点的下一个指针指到要删除节点的下一个节点...,第二次用来找到要删除的倒数第n个元素,有没有更好的办法呢,只遍历一次?...解法二 解法一已经实现了我们想要的功能,我们回看上面的思考(只扫描一趟实现此功能),我们看这个问题的本质,倒数第n个就等正数的第(len-n)+1个,我们看下图: ?

    1.3K30

    如何删除给定单向链表的倒数第N个元素

    如何删除给定单向链表的倒数第N个元素? 先分析下有哪些关键词: 1. 单向链表,那也就是我们只能单向遍历; 2....倒数第N个元素,只能先遍历到尾部,才知道倒数第N个元素是什么,但问题又出现了,是单向链表,不能反向遍历,那该如何解决呢? 3....删除,要想删除某一元素,是需要知道这个指定元素的前一元素才行,那我们其实要找到的倒数N+1个元素....以如下队列为例,如果要删除倒数第2个元素,就要找到倒数第3个元素,也就是倒数第N+1个元素,那改如何做呢? 首先一定需要一个指针遍历到队列尾部的,那怎么记录这个指针已经遍历过的元素呢?...两个指针按照同样的速度同时移动,当快指针到达结尾的时候,慢指针也就到达了倒数第N+1个元素的位置. 再细分下,如果要删除的目标元素正好和链表长度相同呢?

    67310

    leetcode-for-sql-部门工资最高的员工

    LeetCode-SQL-184-部门工资最高的员工 大家好,我是Peter~ 本文讲解的是LeetCode-SQL的第184题目,题目名为:部门工资最高的员工 难易程度:中等 题目 Employee...SQL 查询,找出每个部门工资最高的员工。...也就是说:如果部门中存在多个人同时最高,都要显示出来。 思路 个人思路1 个人思路:找到每个部门中的最高值,再和这个最高值进行计较;如果大于等于这个最高值,那肯定是部门最高的。...,肯定是最高的 上面子句的作用就是找到每个部门中的薪水最高值 个人思路2 思路2是先使用窗口函数根据每个部门进行排序,从而得到每个人的排名,我们再取出每个人的名次即可。...先对 DepartmentId 字段分组查询最大值,得到不同 DepartmentId 下的最大值 select -- 根据部门找分组找到部门号和最大值 DepartmentId, max(Salary

    37610

    Oracle子查询相关内容(包含TOP-N查询和分页查询)

    Example4:查询部门平均工资大于30号部门最高工资的部门信息。...操作符,用于获取30号部门的工资信息,这里any的作用和all不同,主要取最小工资,任意就是说大于这些工资里面任意一个也就是大于最小的工资即可。  ...二、oracle中TOP-N查询: 概念:用于获取一个查询中的前N条记录,需要借助rownum伪列来实现,rownum伪列,oracle为每个查询自动生成的伪列,物理上并不存在,查询中经常涉及多个表,但每个查询只有一列伪列...Example:查找部门号为20和30的工资最高的5个员工信息 select * from (select * from emp where deptno in(20,30) order by sal...Example:获取员工表中20,30部门按工资降序以后的第4页也就是第7,8两条数据 select * from (select rownum rowline,emp1.* from (select

    96620

    Algorithms_入门基础_如何使用最高效的方式来判断一个数是否是2的N次方

    ---- Question 引入… 先看个阿里巴巴的面试题吧 如何使用最高效的方式来判断一个数是否是2的N次方?...2的N次方 ====> 就可以看成 这个数是不是可以拆成 N个2相乘嘛 那根据这个思路的话 ,写个伪代码 while(n>1){ n % 2 == 0 ---> 如果除以2不为0 ,肯定不是2的N...次方 n = n / 2 ; ---> 继续除以2 (即我们上面说的拆成N个2),循环判断 } 分析好了,我们来用Java语言实现下 /** * @author 小工匠 * @version...我们看下上面的规律哈 n 和 n-1 这两个十进制的整数 ,按照二进制进行 按位与运算后,为0,那么这个n就是2的N次方。...Byte也就是人们常说的字节,通常由8个位(8bit)组成一个字节(1Byte) 比如我们常见的基本类型的取值范围 ?

    45230

    10道常考SQL笔试题

    获取每个部门薪资最高的员工信息 题目:在 Employees 表中,获取每个部门(department)薪资最高的员工的姓名、部门和工资。...获取累计工资排名 题目:在 Employees 表中,计算每个员工的工资排名,并按工资从高到低进行排序。...查找前N个最高薪资的员工 题目:获取 Employees 表中第N高工资的员工信息(N是变量),要求能够灵活查询不同N值的结果。...使用递归查询获取员工层级 题目:在 Employees 表中,每个员工都有一个 manager_id,表示其直属经理。请编写SQL语句以递归方式查找一个特定员工的所有上级。...查询每个部门中工资比平均工资高的员工 题目:在 Employees 表中,查询每个部门中工资比该部门平均工资高的员工姓名和工资。

    15610

    MySQL复合查询

    而一些部门奖金为空,加起来后的结果自然也为空,故需要ifnull判断是否为空,若为空,则替换成0 显示工资最高的员工的名字和工作岗位 此时,可以先找到最高的工资,然后通过这个工资找到对应的ename。...显示每个部门的平均工资和最高工资 此时显示的是每个部门,而不是全公司,所以一定是要按照部门进行分组的。按照谁分组,查询时就可以将谁显示,因为这样相同的值可以压缩。...平均工资小数过多,用format函数将小数控制在两位: 显示平均工资低于2000的部门号和它的平均工资 我们先将其分解:分组部门先找到平均工资低于2000的avg(sal),通过这个avg(sal)找到对应的部门号...本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。 将三个表以笛卡尔积的形式合并会得到一个包含三个表的全部信息的表。...查找每个部门工资最高的人的姓名、工资、部门、最高工资 看到部门,肯定就是聚合。聚合的结果只会有最高工资这个数字,姓名,工资都无法聚合。

    21140

    MySQL基础之查询(二)

    ,就会用到连接查询 笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 按年代分类: sql92标准:仅仅支持内连接 sql99...②n表连接,至少需要n-1个连接条件 ③ 多表的顺序没有要求 ④一般需要为表起别名 ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选 案例1:查询女神名和对应的男神名 SELECT NAME...查询平均工资最高的 job 信息 #①查询最高的job的平均工资 SELECT AVG(salary),job_id FROM employees GROUP BY job_id ORDER BY AVG...各个部门中 最高工资中最低的那个部门的 最低工资是多少 #①查询各部门的最高工资中最低的部门编号 SELECT department_id FROM employees GROUP BY department_id...查询平均工资最高的部门的 manager 的详细信息: last_name, department_id, email, salary #①查询平均工资最高的部门编号 SELECT department_id

    1.9K10

    MySQL表的增删查改

    select * from exam_result limit 3; 方式二:也可以在一个指定的范围进行筛选:limit m,n表示显示从第m+1条开始显示,显示n条数据。...方式三:limit n offset m;表示从第m条开始,筛选n条结果。m从0算起。...如下: 其中部门表(dept)的表结构和表中的内容如下: 员工表(emp)的表结构和表中的内容如下: 工资等级表(salgrade)的表结构和表中的内容如下: 显示每个部门的平均工资和最高工资...在group by子句中指明按照部门号进行分组,在select语句中使用avg函数和max函数,分别查询每个部门的平均工资和最高工资。...显示每个部门的每种岗位的平均工资和最低工资 与上面不同的是,这个分组会分两次,即先在全表中,按照部门的不同进行分组,分组后的每个小组再根据岗位的不同进行分组。

    30520

    干货 | Oracle数据库操作命令大全,满满的案例供你理解,收藏!

    like 条件; 说明条件组成: %: 表示0个或者多个任意字符 _: 表示任意一个字符 案例:查询emp表中,员工姓名的首字母(第1个字母)是M开头的,员工的编号,姓名,职位 Mfsdfdf M...emp表中,员工姓名倒数第2个字母是N的,员工的编号,姓名,工资 dfsdNe Nw ==> %N_ select empno,ename,sal from emp where ename like...'%N_'; 练习:查询emp表中,员工姓名正数第3个字母是N的,员工的编号,姓名,工资 select empno,ename,sal from emp where ename like '__N%...部门的最高工资 select deptno,count(*),max(sal) from emp group by deptno; 案例:查询emp表中,工资大于1000的,每个部门的编号,部门的工资总和...,每个部门的编号,部门的最高工资,部门的人数,根据部门编号升序排列 select deptno,max(sal),count(*) from emp where mgr is not null group

    3.9K20

    数据库笔记

    9、分组查询 --查询不同部门的最高工资 select deptno, max(sal) from emp group by deptno; 分组之后select与from之间只能出现分组字段和多行函数...多分组查询: --查询不同部门不同工作的人数 select deptno, job, count(*) from emp group by deptno,job 多分组查询先按照第一个字段分组查询,...然后按照第二个字段在已分完组的 基础上再分组 having子句: --查询不同部门不同工作的人数并且人数大于1的信息 select deptno, job, count(*) from emp group...-查询工资高于平均工资的员工信息 select * from emp where sal > (select avg(sal) from emp) --查询和soctt属于同一个部门并且工资低于他的员工...* from emp e where rownum 5 --每页显示m条数据,查询第n页 select * from (select rownum r, e.*

    79920

    太原面经分享:如何用js实现返回斐波那契数列的第n个值的函数

    ,求第n个数的值” 不得不承认,当时我第一眼看这道题大脑里是懵逼的。后来才想起来,这不就是数学题里的那个斐波那契(肥婆纳妾)数列么!从第三个数开始,每个数都是前两个数的和。...那其实这个问题还可以换个问法:实现一个函数,输入一个数字n能返回斐波那契数列的第n个值。 大概的思路是这样的: 首先我们要把特殊的部分给独立出来做个判断,哪些数字是特殊的呢?...很明显是斐波那契数列的前两项,而斐波那契数列的前两项都为1。然后定义三个变量,firstNum、secondNum、total,分别代表着第一个数字,第二个数字,还有他们俩之和。...然后通过一个for循环遍历,将firstNum加上secondNum的结果赋值给total,然后将secondNum的value赋值给firstNum,把total的value赋值给secondNum,...firstNum + secondNum; firstNum = secondNum; secondNum = total; } return total; } 记住,面试官与咱们应聘者的思维不同

    1K30

    干货 | Oracle数据库操作命令大全,满满的案例供你理解,收藏!

    like 条件; 说明条件组成: %: 表示0个或者多个任意字符 _: 表示任意一个字符 案例:查询emp表中,员工姓名的首字母(第1个字母)是M开头的,员工的编号,姓名,职位 Mfsdfdf M=...表中,员工姓名倒数第2个字母是N的,员工的编号,姓名,工资 dfsdNe Nw ==> %N_ select empno,ename,sal from emp where ename like '%...N_'; 练习:查询emp表中,员工姓名正数第3个字母是N的,员工的编号,姓名,工资 select empno,ename,sal from emp where ename like '__N%'; 6.9.6...格式: select 列名/聚合函数 from 表名 where 条件 group by 列名 order by 列名/聚合函数 asc/desc; 案例:查询emp表中,每个部门的编号,部门的人数,部门的最高工资...having avg(sal)>2000; 练习:查询emp表中,工资在1000~5000之间的,每个职位的名称,职位的人数,职位的平均工资,职位的最高工资,要求职位的最高工资小于3000,根据平均工资降序排列

    3.8K20

    MySQL从入门到入魔(02)

    '; 6625 查询程序员人数 select count(*) from emp where job='程序员'; 2 查询1号部门中有领导的员工中的最高工资 select max(sal...) from emp where deptno=1 and mgr is not null; 查询2号部门的最高工资和最低工资 起别名 select max(sal) 最高工资,min(sal) 最低工资...sal) from emp where deptno=1; 查询每个部门的平均工资 select deptno,avg(sal) from emp group by deptno; 查询每个工作的最高工资...desc; 查询有领导的员工,每个部门的编号和最高工资 select deptno,max(sal) from emp where mgr is not null group by deptno;...查询有领导的员工,按照工资升序排序,第3页的2条数据 select * from emp where mgr is not null order by sal limit 4,2; 查询每个部门的工资总和

    66130

    相关子查询 与非相关子查询

    where tot_amt>any(select tot_amt from sales where sale_id='e0013'and 'order_date='1996/11/10') 选出不同的人金额最高的订单...* from work where 部门编号 in [not in](select 部门编号 from dbo.部门) B:检索出在work表中每一个部门的最高基本工资的职工资料...说明:由外查询提供一个部门名称给内查询,内查询利用这个部门名称找到该部门的最高基本工资,然后外查询根据基本工资判断是否等于最高工资,如果是的,则显示出来....不能后面的select得到的结果不是一个值而又跟在=后必然出错 在嵌套中使用exists关键字[存在] 例:1:用嵌套work表和嵌套部门表,在嵌套work表中检索出姓名和职工号都在嵌套部门存在的职工资料...下面准确说明了如何计算此查询:SQL Server 通过将每一行的值代入内部查询,考虑 Employee 表中的每一行是否都包括在结果中。

    10610
    领券