LeetCode.M19

题目:

题目大意:

​ 给定一个链表和一个数n,删除倒数第n个数。

数据范围:

如图所示

思路:

​ 采用双指针。思路和找到数组中倒数第n个数一致,只不过这里需要找到链表的倒数第n+1个元素,这样的话,才可以把倒数第n个数删掉。注意也有可能要求删除第一个结点(倒数最后一个节点),这里我们为了保持操作的一致性,在第一个节点的前面新增加一个头结点headNode。

​ 然后进行双指针操作,初始时pi = pj = headNode, k = 1。

  • 在k < n + 1时,只有pi在移动。

  • 在 k >= n + 1时,pi和pj一起移动。

  • 在pi.next == null 的时候,pj所处的位置正是倒数第n + 1个节点x的位置,

    现在将倒数第n个节点删除(x.next = x.next.next)。

​ 注意返回时,返回headNode.next,因为我们在第一个节点前增加了一个头结点。

代码:

import java.util.List;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 headNode = new ListNode();headNode.next = head;ListNode pi = headNode, pj = headNode;int k = 1;while (pi.next != null){if (k >= n + 1){pj = pj.next;}pi = pi.next;k ++ ;}pj.next = pj.next.next;return headNode.next;}
}public class Main {public static void main(String[] args) {Solution solution = new Solution();ListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);ListNode node4 = new ListNode(4);ListNode node5 = new ListNode(5);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;ListNode head = solution.removeNthFromEnd(node1, 1);while (head != null){System.out.print(head.val + ", ");head = head.next;}System.out.println();}
}

时空复杂度分析等:

  • 时间复杂度 : O(n)

  • 空间复杂度 : O(1)

题目链接:

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

LeetCode.M19.删除链表的倒数第N个结点相关推荐

  1. 29. Leetcode 19. 删除链表的倒数第 N 个结点 (链表-双指针)

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点.示例 1:输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:输入:head = [1], ...

  2. leetcode 19. 删除链表的倒数第 N 个结点(双指针应用)

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1 ...

  3. LeetCode 19 删除链表的倒数第 N 个结点

    https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 解决方案 class Solution {public ListN ...

  4. leetcode 19. 删除链表的倒数第 N 个结点(c++)

    思路分析 常规解法:双指针与栈,两种解法 题解1 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListN ...

  5. 【力扣(LeetCode)】【C/C++】【19.删除链表的倒数第 N 个结点】

    学习时间: 2023年1月30日 题目描述: 题解分享: // 作 者 : 繁 华 倾 夏 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h&g ...

  6. 《LeetCode力扣练习》第19题 删除链表的倒数第 N 个结点 Java

    <LeetCode力扣练习>第19题 删除链表的倒数第 N 个结点 Java 一.资源 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:hea ...

  7. LeetCode Algorithm 19. 删除链表的倒数第 N 个结点

    19. 删除链表的倒数第 N 个结点 Ideas 链表经典题目,还是09年考研408数据结构最后一道大题,在LeetCode上只能算中等难度的题目. 说回题目其实不难,之前跟着左神练了很多双指针的题目 ...

  8. 【LeetCode】【HOT】19. 删除链表的倒数第 N 个结点(双指针)

    [LeetCode][HOT 100]19. 删除链表的倒数第 N 个结点 文章目录 [LeetCode][HOT 100]19. 删除链表的倒数第 N 个结点 package hot;import ...

  9. [链表|多解法] leetcode 19 删除链表的倒数第N个节点

    [链表|多解法] leetcode 19 删除链表的倒数第N个节点 1.题目 题目链接 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2-&g ...

最新文章

  1. java验证码局部刷新_JS局部刷新图形验证码
  2. 语言 班费管理系统源代码_固定资产管理系统开源的各种语言翻译
  3. Black Hat 2017黑帽大会:8款值得一看的黑客工具
  4. 【三维路径规划】基于matlab A_star算法无人机山地三维路径规划【含Matlab源码 266期】
  5. 一图助你搞明白Spring应用上下文初始化流程!
  6. wps vba宏插件_wps下载_wps下载免费完整版客户端[办公软件]
  7. centos7轻松搭建文件服务器
  8. php 随机输出字符串,如何使用PHP生成随机字符串
  9. Linux环境安装Postgresql报错。configure: error: zlib library not found
  10. day19 文件操作
  11. java HotSpot 内存管理白皮书
  12. 美团App用户界面分析
  13. 从ReentrantLock到AQS
  14. JAVA---冒泡排序
  15. 《信息与编码》考试复习笔记6----第六章连续信源熵和信道容量(考点在连续信道容量)
  16. 建筑材料行业采购合同电子化,数商云采购商城系统助力企业采购业务更规范高效
  17. vsco和lr哪个好_vsco、泼辣修图、snapseed哪个好用?使用对比
  18. 聊聊API网关的作用
  19. ReactNative 原生UI组件 桥接原生 Android
  20. 微软暑期实习Explore Program面经(已Offer)

热门文章

  1. Flask学习之旅——2.2 模板过滤器
  2. 计算机基础office快捷键全称,常用Office Word办公软件快捷键介绍
  3. 知乎刷爆朋友圈的H5,回答了周源年初提出的几个问题
  4. 原生js开发canvas双人射击游戏
  5. Apache .htaccess规则RewriteCond 和RewriteRule-实操解释说明
  6. Apache中RewriteCond规则参数介绍
  7. 程序员如何轻松引起猎头公司的注意,并拿到高薪offer,逃不过这8条定律!
  8. 安泰ATA-1372A宽带放大器技术参数
  9. python 二次平滑_Python 指数平滑
  10. 总线收发器有什么作用?