题目描述:LeetCode876


非空链表,我们不需要判断为空的条件。

思路:

需要得到链表的中间节点,也许会想到,将链表遍历一遍,求出长度,再遍历一遍得到中间节点。如果只能遍历一遍呢?中间节点,也就是链表长的二分之一,那就可以通过定义两个指向,都从head开始向后遍历。fast一次向后挪两个节点,slow一次向后挪动一个节点。当fast为null或者fast.next为null,代表着fast已经走到终点,而此时的slow恰好就遍历了一半链表,此时slow就处于中间节点的位置。

代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode middleNode(ListNode head) {ListNode fast=head;ListNode slow=head;while( fast!=null && fast.next!=null){fast=fast.next.next;slow=slow.next;}return slow;}
}

题目描述:剑指Offer22

思路:

几乎和上面一致,不过此时的slow和fast起点不同,因为当fast到重点时,slow要比fast少k-1步。fast和slow每次都走一步,因为它们的距离差已经确定,所以速读要一致。

代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode getKthFromEnd(ListNode head, int k) {if(head==null){return null;}ListNode fast=head;ListNode slow=head;while(k-1>0){if(fast==null || fast.next==null){return null;}fast=fast.next;k--;}while(fast!=null && fast.next!=null){fast=fast.next;slow=slow.next;}return slow;}
}

LeetCode876 --- 剑指Offer 22相关推荐

  1. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  2. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点

    [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 文章目录 [LeetCode]剑指 Offer 22. 链表中倒数第k个节点 一.遍历 二.双指针 总结 一.遍历 先遍历统计链表长 ...

  3. 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)

    19. 删除链表的倒数第 N 个结点(java) 一.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3 ...

  4. 剑指 Offer 22(链表4).链表中的倒数第k个结点

    剑指 Offer 22(链表4).链表中的倒数第k个结点 问题描述: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链 ...

  5. 剑指offer——22.链表中倒数第k个节点

    题目: 输入一个链表,输出该链表中倒数第k个结点. 知识点: 注意这种想法:找倒数第几个.中间的数或三分之一的数这种题,可以利用两个指针,通过指针移动的不同方式来实现 注意: 还是考虑的情况要周全,此 ...

  6. Leetcode 剑指offer 22. 链表中第k个节点 (每日一题 20210716)

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6. ...

  7. 剑指 Offer 22. 链表中倒数第k个节点(C语言)

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...

  8. 【双100%解法】剑指 Offer 22. 链表中倒数第k个节点

    立志用最少的代码做最高效的表达 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的 ...

  9. 【算法】剑指 Offer 22. 链表中倒数第k个节点

    1.概述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3. ...

最新文章

  1. 计算机工程学院运动会方阵口号,关于校运会的方阵口号
  2. 雷观(六):码农值千金
  3. 常见的新算法的标准测试函数(Ackely,Rastrigin,Griewangk,SumSquartes,Sphere,Quartic,Schwefel' Problem等)
  4. java将图片(jpg/bmp/png)转16位bmp(RBG565)
  5. Linux 常用命令大放送
  6. Linux nmon 命令
  7. stm32气压传感器 带探头的_几种常用传感器
  8. 正本清源:LBS(基于位置服务)技术——高精准IP地址定位的8大误区(下)
  9. HTTP协议和TCP/IP协议与Socket之间的区别
  10. WPS中添加页眉和页脚
  11. 动画设计与制作——3D Max场景建模《我的家》V-Ray 4.1
  12. python搭建自己的网站_Python+Django搭建自己的blog网站
  13. Antd 修改 Table 悬浮颜色、表头背景色
  14. python lncrna_[转载]lncrna分析流程
  15. win10与xp/win7 局域网不通的修改方法
  16. Android P (9.0)刘海屏(DisplayCutout)适配方法
  17. JQ局域网通信软件(C/S)
  18. LeetCode 695. 岛屿的最大面积
  19. C#实现压缩与解压缩方案
  20. 网络安全学习2个月,感觉什么都不会?

热门文章

  1. 如何在忙碌之余学习数据科学?
  2. 现代黄河三角洲的冲淤分区及地层特征
  3. web应用开发的主流技术
  4. Qt跨平台框架在金融领域必然性
  5. 计算机三级网络技术最全知识点总结【7】
  6. Win10内置Linux系统安装docker
  7. CMPedometer 计步器的使用—— 基于API分析
  8. 直流无刷电机的好处与坏处
  9. VS连接Linux服务器
  10. 设计链表(单链表、双链表)