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

14-链表练习-剑指 Offer II 021. 删除链表的倒数第 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]

提示:

    链表中结点的数目为 sz
    1 <= sz <= 30
    0 <= Node.val <= 100
    1 <= n <= sz (n符合规范,题目中不用判断其合法性)

进阶:能尝试使用一趟扫描实现吗?


思路

此题与上一题类似,采用快慢指针法。不同的是,此题的slow和fast两个快慢指针都是从dummyHead虚拟头节点开始向后走,这样可以确保当fast指向null时,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) {if(head == null) {return null;}ListNode dummyHead = new ListNode(-1);dummyHead.next = head;//采用快慢指针法先找到链表中倒数第n个节点ListNode slow = dummyHead, fast = dummyHead;//先让fast走n步for(int i = 0; i < n + 1; i++) {if(fast == null) {return head;}fast = fast.next;}//让slow和fast一起向后走while(fast != null) {slow = slow.next;fast = fast.next;}//此时slow就指向了待删除节点的前一个节点,删除要删的节点即可slow.next = slow.next.next;return dummyHead.next;}
}

http://www.lryc.cn/news/44377.html

相关文章:

  • 用Java解决华为OD机试考题,真的高效,真的强,来吧,清单奉上,祝你上岸
  • 【Stable Diffusion】Stable Diffusion免安装在线部署教程
  • Jetson设备如何接调试串口工具查看内核打印信息
  • 一直被低估的美图,正悄悄成为AIGC领跑者
  • JAVA开发与运维(JavaWeb测试环境搭建)
  • python 的range函数你需要知道三件事
  • 穿越周期的进击,科沃斯“敢”于变革
  • 不使用IF语句对一组数进行排序的分析和实现
  • 在大厂做了5年测试,3月被无情辞退,想给摸鱼的兄弟提个醒
  • 【职业规划】第二篇:程序员分级之中级程序员
  • Studio One没有声音怎么办 Studio One工程没有声音
  • x86架构利用docker去编译arm64的应用程序
  • 华为OD机试题 - 优秀学员统计(JavaScript)| 机考必刷
  • Nginx学习(7)—— 过滤模块(filter)
  • 【创作赢红包】
  • Mybatis入门
  • 金色传说:SAP-PP-CO01/CO02 生产订单下达保存时报错:用户状态 新建 是活动的 (ORD %00000000001) 消息号BS014
  • @Transactional和synchronized同时使用时的一些问题以及解决
  • 贪心-根据身高重建队列
  • 「解析」牛客网-华为机考企业真题 21-40
  • JAVA练习92-快乐数
  • BPF 之路:技术背景
  • C++—— set、map、multiset、multimap
  • Qlib使用
  • TL-WDR7660 httpProcDataSrv任意代码执行漏洞复现分析
  • 基于DDS的SOA测试方案实现
  • LibTorch中Windows系统环境配置及CUDA不可用问题解决
  • Java并发编程实战二
  • Linux中最基本的命令ls的用法有哪些?
  • 第 100002(十万零二)个素数是多少?