1. 链表的中间结点

    给定一个头结点为 head 的非空单链表,返回链表的中间结点。
    如果有两个中间结点,则返回第二个中间结点。

返回链表的中间结点可以使用双指针法,也就是快慢指针。创建两个指针,同时从 head 结点出发,满指针走得慢,一次走一步,快指针走得快,等到快指针走到链表的末尾时,满指针刚好走到链表的一半,返回满指针指向的结点就是链表的中间结点。

class Solution {public ListNode middleNode(ListNode head) {// 快慢指针ListNode slow = head;ListNode fast = head;while(fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}
}
  1. 删除链表的倒数第 N 个结点

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

使用快慢指针,两个指针同时遍历链表,由于需要找到倒数第n个结点,可以使快指针超前n个结点,这样当快指针走到链表末尾,慢指针就是倒数第n个结点。满指针与快指针相差n - 1个结点,为了方便删除,可以创建一个虚拟头结点,这样当快指针走到链表末尾时,慢指针指向倒数第 n 个结点的前驱节点,然后使用 slow.next = slow.next.next 删除倒数第 n 个结点。

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode pre = new ListNode(0);pre.next = head;ListNode fast = pre;ListNode slow = pre;while(n != 0) {fast = fast.next;n --;}while(fast != null && fast.next != null) {fast = fast.next;slow = slow.next;}slow.next = slow.next.next;return pre.next;}
}

快慢指针 ——链表 | Leetcode 练习相关推荐

  1. LeetCode 234. 回文链表(快慢指针+链表反转)

    1. 题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶: 你能否用 O(n) ...

  2. leetcode 234. 回文链表(快慢指针+链表倒置)

    请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 代码 /*** Definitio ...

  3. 程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)

    1. 题目 编写一个函数,检查输入的链表是否是回文的. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你 ...

  4. 快慢指针 —— 链表中点

    使用 快慢双指针,快指针一次走两步,慢指针一次走一步,十分 tricky: LinkNode* FindMid(LinkNode *p){if (!p) return NULL;LinkNode* s ...

  5. [Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]

    [问题描述][中等] [解答思路] 141 每次遍历到一个节点时,判断该节点此前是否被访问过. 具体地,我们可以使用哈希表来存储所有已经访问过的节点.每次我们到达一个节点,如果该节点已经存在于哈希表中 ...

  6. [Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]

    [问题描述][中等] 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数.输入: ...

  7. [Leedcode][JAVA][第876题][快慢指针]

    [问题描述] 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化 ...

  8. LeetCode 2130. 链表最大孪生和(链表快慢指针+反转链表+双指针)

    文章目录 1. 题目 2. 解题 1. 题目 在一个大小为 n 且 n 为 偶数 的链表中,对于 0 <= i <= (n / 2) - 1 的 i ,第 i 个节点(下标从 0 开始)的 ...

  9. LeetCode 2095. 删除链表的中间节点(快慢指针)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个链表的头节点 head .删除 链表的 中间节点 ,并返回修改后的链表的头节点 head . 长度为 n 链表的中间节点是从头数起第 ⌊n / 2 ...

最新文章

  1. Activity 切换动画
  2. wxWidgets:通过组合现有小部件制作新的可重用小部件
  3. 迈向电商认知智能时代的基石:阿里电商认知图谱揭秘
  4. mysql 123456_MySQL字符串中抽取数值的方法 select -(-'123456@163.com'); 很牛逼
  5. 数据类型的判断 c# 1614092544
  6. 从“做什么”到“怎么做”,说说一只蚊子
  7. Javascript鼠标键盘事件
  8. 赵娜计算机,新学期 新起点 新征程——计算机学院2016级召开系列年级工作会议...
  9. 结对-贪吃蛇-开发过程
  10. 抖音康辉机器人_央视主持人太会玩!康辉录抖音,笑死了!
  11. 低代码发展趋势解读|低代码成为企业数字化转型“加速器”
  12. 如何开发一款棋牌游戏?棋牌游戏平台搭建
  13. Juniper Open contrail 虚拟网络互通
  14. 局域网入侵检测过程详解
  15. 提高微服务安全性的11个方法
  16. argc,**argv
  17. rsync实现两台服务器上的实时同步
  18. ANDROID以流形式上传文件
  19. 【Unity Shader入门精要】普通纹理和高级纹理
  20. Android 增量升级原理及实现方式分享

热门文章

  1. js中的call和play
  2. Days 24 网络编程 正则表达式
  3. 用talib列举某股票历史数据中2只乌鸦形态出现时间
  4. 【备份】git命令行
  5. Python try...except...时捕获异常时具体文件和行数
  6. Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)
  7. pc端和移动端集成第三方快捷登录 --- 微博为例
  8. 2、selenium原理和启动浏览器(Chromoption类)
  9. oracle distinct 用法
  10. android之java程序性能优化(不断补充)