当前位置: 首页 > article >正文

【LeeCode】19.删除链表的倒数第N个节点

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

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

思路:

双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉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 removeNthFromEnd(ListNode head, int n){
        ListNode dummyNode = new ListNode(0);
        dummyNode.next = head;

        ListNode fastIndex = dummyNode;
        ListNode slowIndex = dummyNode;

        // 只要快慢指针相差 n 个结点即可
        for (int i = 0; i <= n - 1; i++){ 
            fastIndex = fastIndex.next;
        }

        while (fastIndex.next != null){
            fastIndex = fastIndex.next;
            slowIndex = slowIndex.next;
        }

        //此时 slowIndex 的位置就是待删除元素的前一个位置。
        //具体情况可自己画一个链表长度为 3 的图来模拟代码来理解
        slowIndex.next = slowIndex.next.next;
        return dummyNode.next;
    }
}


http://www.kler.cn/a/154454.html

相关文章:

  • GRE做题笔记(零散的个人经验)
  • 在 Node.js 中解决极验验证码:使用 Puppeteer 自动化
  • 2024-11-16 串的存储结构
  • React Native 全栈开发实战班 - 网络与数据之网络请求基础
  • WebChromeClient 方法分类及其功能
  • 蓝桥杯——数组
  • 电子学会C/C++编程等级考试2022年03月(四级)真题解析
  • Git 的基本概念和使用方式。
  • 【二叉树】常见题目解析(2)
  • 【智能家居】面向对象编程OOP和设计模式(工厂模式)
  • 四川成都数字创新大赛-2数据交易平台带给智慧农业项目的优势
  • Go查询Elasticsearch
  • 【brpc学习实践十一】session-local与thread-local应用与brpc抽象工厂模式实践
  • Mybatis 分页查询的三种实现
  • css取消移动端长按元素背景色
  • OCR原理解析
  • Redis面试常见问题
  • Python基础学习快速入门
  • ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO
  • SpringBoot拦截器、过滤器、自定义注解、监听器、全局异常-使用详解
  • Vue3中定义变量是选择ref还是reactive?
  • 使用KubeSphere练习故障注入
  • SELinux refpolicy详解(4)
  • Layer Normalization是什么
  • Oauth2.0 学习
  • 180天Java从小白到就业-Day03-03Java位运算符、赋值运算符、数据交换的三种方式