-
2.2 实现一个算法从一个单链表中返回倒数第n个元素
2015-09-08 11:54:47解法,我也是从这里学的,博客只是说一下自己的理解挺有意思的,返回的是倒数的元素,假设是正数的,我们可以从头数,但是倒数的,会不会想把这个单链表翻转一下呢??还是先遍历链表数好总数然后再数(总数-n个)?...挺有意思的,返回的是倒数的元素,假设是正数的,我们可以从头数,但是倒数的,会不会想把这个单链表翻转一下呢??还是先遍历链表数好总数然后再数(总数-n个)?
其实说白了就是能倒着数n个就行了,有没有想到栈?先进后出?全进了之后开始数N个?进一步的,递归!而且递归能够节省空间啊。解法二:设置两个指针,控制他们的距离为N,然后先后遍历链表,等前指针遍历到末尾的时候,后指针指向的就是所求节点(五体投地)
-
剑指offer 第14题 链表中倒数第k个结点
2019-01-14 19:54:07倒数第k个就是正数第n-k+1个,从第一个结点到第n-k+1个结点一共要走n-k步,从第k+1个结点到n+1个结点也是n-k步,从第一个结点到第k+1个结点,走k步 代码: # -*- coding:utf-8 -*- # class ListNode: # d...描述:
输入一个链表,输出该链表中倒数第k个结点。
思路:
双指针,p1先走k步,然后同时走,p1到头时候返回p2
倒数第k个就是正数第n-k+1个,从第一个结点到第n-k+1个结点一共要走n-k步,从第k+1个结点到n+1个结点也是n-k步,从第一个结点到第k+1个结点,走k步
代码:
# -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def FindKthToTail(self, head, k): # write code here if not head: return None p1 = head p2 = head l = k while l > 0: try: p1 = p1.next l -= 1 except: return None while p1: p1 = p1.next p2 = p2.next return p2
结果:
运行时间:26ms
占用内存:5848k
-
Java输出单链表倒数第K个节点
2020-11-02 16:01:49一个先不动,另一个指针先跑k-1步(注意:此时,第一个指针跑了k-1,其实此时这个指针距离第二个指针为k),然后,两个指针同时往后跑就行了,他们的距离为k,直到前面的指针跑到末尾,另一个指针指向的就是倒数第K...这题就一个思路问题,想到了就容易,想不到就感觉很难,容易从超高时间复杂的角度来考虑问题。
思路:倒数第K个节点,其实也就是正数第Length-k+1个节点。
因此,两个指针就完事了,一个先不动,另一个指针先跑k-1步(注意:此时,第一个指针跑了k-1,其实此时这个指针距离第二个指针为k),然后,两个指针同时往后跑就行了,他们的距离为k,直到前面的指针跑到末尾,另一个指针指向的就是倒数第K个节点。
代码:public static int getDaoShuK(int k,LinkNode pre,LinkNode behind) { for(int i=0;i<k-1;i++) { pre=pre.next; } while(pre.next!=null) { pre=pre.next; behind=behind.next; } return behind.value; }```
-
【Java - J - 22】链表中倒数第K个节点
2020-06-07 02:33:16为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。 练习地址 实现 倒数第k...题目描述
输入一个链表,输出该链表中倒数第k哥结点。
为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。
练习地址实现
倒数第k,正数n-k+1
方法:遍历一次,避免计算长度
两个指针p1,p2,保持k-1的距离,p1走到尾,p2为倒数k/** 21 链表中倒数第K个节点*/ public class C22_list_FindTailK { public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } //倒数第k,正数n-k+1 //遍历一次,两个指针p1,p2,保持k-1的距离,p1走到尾,p2为倒数k public static ListNode tailK(ListNode head, int k) { if (head == null || k == 0) { return null; } ListNode p1 = head; ListNode p2 = null; for(int i =0;i<k-1;i++){ //a指针先走k-1 if(p1.next!=null){ p1=p1.next; }else { return null; } } p2=head; while (p1.next!=null){//a,b同时走 p1=p1.next; //a走到尾 p2=p2.next; //b为倒数第K个 } return p2; } }
Test
public static void main(String[] args) { ListNode node1 = new ListNode(1); ListNode node2 = new ListNode(5); ListNode node3 = new ListNode(7); node1.next = node2; node2.next = node3; System.out.println(tailK(node1,1).val); }
实现
20210203
// 遍历了2遍,不推荐//执行用时:0 ms, 在所有 Java 提交中击败了100.00%的 //用户内存消耗:36.3 MB, 在所有 Java 提交中击败了34.39%的用户 class Solution { public ListNode getKthFromEnd(ListNode head, int k) { if(head==null || k<=0) return null; ListNode node = head; int n =0; while(node!=null){ n++; node =node.next; } for(int i=1;i<n-k+1;i++){ head=head.next; } return head; } }
-
单链表查找倒数第k个节点
2016-04-10 11:08:03假设一个给定一个链表,长度为 6,现在查找倒数第 2 个结点:给定两个指针, fast 和 slow 开始都让他们指向头结点首先,让 fast 指针先走到正数第 k 个结点,也就是走 k-1 步,这里 k=2,所以先让 fast 走1步这... -
删除链表倒数第n个结点
2020-10-08 10:56:19首先,我们要清楚链表的长度length,这样的话,要删除倒数第n个节点的话,就是删除正数的第(length - n)个节点(从 0 开始遍历链表)(当删除倒数第length的节点时例外,因为我们遍历链表的时候从 0 开始,所以这... -
[编程题]链表中倒数第k个结点
2016-09-26 21:12:00public class Solution { /** * 分析 : * * 1、倒数第k个节点,即正数第length-k+1个节点,只需要从第1个... * 3、所以从第一个节点,向前走length-k步,便会走到正数第length-k+1个节点, * * 4、从 -
剑指offer 链表中倒数第k个结点 python
2019-09-20 17:40:531. 看到是单链表肯定不能反方向循环,倒数第k个节点,比如链表长度为6,倒数第三个也就是相当于正数第四个,符合6-3+1=4。 2. 所以就想到了正向遍历链表两次,但两次复杂度又太高,再考虑能不能遍历一次,进而想到... -
算法练习篇之:链表中倒数第k个节点
2019-09-13 20:46:11输入一个链表,输出该链表中倒数第k个结点。 解题思路 看到题目,我们直观的想法是从链表头部依次遍历到链表尾端,再从尾端回溯k步。但只有双向链表才可以进行反向回溯,单链表显然是行不通的。求链表倒数第k个... -
线性时间找链表倒数第k个节点
2019-07-26 15:47:15题目描述 09年统考的源题,虽然都能得到**O(n)**的复杂度,不过满分做法是双指针,也就是指针扫一遍,其余做法均10分。...指针1顺序扫到正数第k个节点,从这时候开始指针2跟着指针1往后扫,当指针1到达尾部时,... -
【剑指Offer】链表中倒数第K个节点
2019-07-16 23:51:56题目:输入一个链表,输出该链表中倒数第k个结点。 ...扫一趟链表记录长度len,倒数第k个数就是正数len-k+1个,所以只需要从给定的头节点再一次遍历len-k步就到了该节点 /* struct ListNode... -
剑指Offer--链表中倒数第k个结点
2018-08-15 09:59:00思路:1、得到链表的长度,这样才能从链表头部定位到倒数第k个结点,即正数len-k+1个结点。 2、正向遍历链表,直到len-k+1个结点,返回。 代码: /* public class ListNode { int val; ListNode next = ... -
剑指offer面试题15 链表中倒数第k个结点
2017-08-18 14:21:04思路1:求链表中倒数第k个节点,也就是正数第n-k+1个结点(假设从1开始计数),此时最直观的做法就是从头开始遍历链表定位到这个第n-k+1个结点即可。但是这种做法需要遍历链表2次,第1次遍历需要求得链表中结点总数... -
数据结构和算法之单向链表二:获取倒数第K个节点
2017-12-06 20:28:00我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某一个数据集的倒数或者正数第几个数据。那么今天我们来看一下这个问题,怎么去获取倒数第K个节点。我们拿到这个问题的时候自然而然会想到我们让... -
给定一个无序数组,包含正数、负数和0, * 要求从其中找出三个数的乘积,使得乘积 * 最大,要求时间复杂度o...
2019-09-11 11:08:47然后取最后三个数相乘(记作A),当有负数存在时,取第一个,第二个和倒数第一个数相乘(记作B) 比较A和B 取出大的。 思路非常简单但是,题目没给数的范围限制,数太大时,基本数据类型根本... -
剑值offer66题之每日一题——第十四题
2018-10-23 11:36:07思路:从链表头到倒数第K个节点长度=正数第K个节点到链表尾,让p,q指向表头,先让p指针走到正数第K个节点,然后让P,q同时往后走,当p指针走到表尾时,q正好走到倒数第K个节点。 代码实现: ListNode* ... -
面试题15 链表中到户第K个节点
2016-06-13 20:30:25题目: 输入一个链表,输出该链表中倒数第K个节点。为了符合少数人的习惯...有两种解法,第一种是通过遍历单链表获取其总长度,然后让总长度M减去K加上1获得正数位置L,就是倒数第K个节点。但是这样需要循环两次。第二 -
lintcode 下一个排列
2019-02-17 11:01:20lintcode 下一个排列 描述 给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。 如果没有下一个排列,则输出字典序...从倒数第二个数开始,记为nums[i],从这个第i个数开始,往后所有的数... -
'lintcode 下一个排列'
2019-04-12 22:56:09lintcode 下一个排列描述给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。 如果没有下一个排列,则输出字典序最小的序列。 样例左边是原始排列,右边是对应...思路从倒数第二个数开始... -
Linux常用命令总结
2017-02-13 19:31:39本文总结日常工作中经常用到的linux命令,作为总结,以便学习和回顾。...abc 从倒数第一行到正数第一行的遍历方式查找文件service.log中的字符串abc,并高亮显示. b. vim service.log --> /abc 从第一行到... -
python切片
2019-01-21 20:48:48python 切片 列表a下标从0开始 第二行:从列表头开始正数10个数,即a[0]–a[9] 第三行:从列表倒数第五个到最末尾 第四行:从下标0到下标5(不包含5) 第五行:同上 第六行:列表中,每隔三个取一个数 ... -
Python学习笔记(十)—— 高级特性
2019-01-08 02:14:53一、切片 1、定义: 经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符...B[-3:] 取出倒数第三个到倒数第一个,都是负数的情况下,缺填的为-1(最后一个) C[1:10:2] 从1到10,... -
python的切片功能
2020-11-09 10:33:39python切片功能的基本规则: L(start_index:end_index:step) ...为负数时,表示从倒数第n个数结束(不包括n);不填写时,为默认到结束的位置才结束 step.表示步长。为整数。为正整数n时,表示从左向右,间隔n个数 -
LeetCode 15— 三数之和
2019-02-23 19:43:23这里我们可以先做个剪枝优化,就是当遍历到正数的时候就break,为啥呢,因为我们的数组现在是有序的了,如果第一个要fix的数就是正数了,那么后面的数字就都是正数,就永远不会出现和为0的情况了。然后我们还要加上... -
628.三个数的最大乘积
2020-02-04 16:26:27思路:从大到小排序,取前面三个为方案一,取倒数后面的两个再取第一个为方案二;比较方案一和方案二的大小。情况(一、二、三)都是方案一或者方案二。 class Solution { public: int maximumProduct(vector<... -
毕业生自我鉴定简单范文参考借鉴_精选.doc
2020-12-07 16:17:48毕业生自我鉴定简单范文参考借鉴 时间过得真快啊,大学生活转瞬即逝,在临近毕业对自己也有一个鉴定。下面是由资料库网为大家整理的“大学毕业生自我鉴定”,仅供参考,...从大一的倒数第二到大四上的正数第四,.... -
LeetCode--143. Reorder List
2019-01-01 12:00:28今天是2019年1月1日,祝...要求将链表重组,意思是将链表(链表长度为n)倒数第一的节点(第n个节点)插在正数第一的元素后面,不是一般性的说:将第i个节点(i>n/2)插入到第(n-i+1)个节点的后面。 更直... -
高校毕业生的自我鉴定.doc
2021-01-15 11:56:42从大一的倒数第二到大四上的正数第四,也不能说勤奋刻苦了多少,是心态吧。大一刚来的时候,对考试充满了恐惧,考前,不是复习,而是担心,这样的成绩当然是好不到哪里去的。经过四年的磨练,现在考前已经能够做到...
-
CB测试-源码
-
bvlc_reference_caffenet.zip
-
c#采集摄像头图像源码
-
物联网基础篇:快速玩转MQTT
-
研磨设计模式之桥接模式
-
如何设计四象限电压转换电路?
-
家-源码
-
python_programas-源码
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
nvm安装node以及npm问题
-
beg-csharp-2008-dbs-master.zip
-
VMware vSphere ESXi 7 精讲/VCSA/VSAN
-
HTTP加密实践
-
排序算法题
-
my-first-laravel-package:学习时构建的Laravel包-源码
-
如何用Snapgene 4.3.6进行序列比对及查找碱基位点
-
基音周期提取 matlab
-
基于SSM的医院人事管理系统的设计与实现
-
CycloneIV_EP4CE15开发板SDRAM VGA MicroSD卡 千兆以太网 UART读写等9个DEMO QUARTUS逻辑工程文件.zip
-
实现 MySQL 读写分离的利器 mysql-proxy