返回顶部
首页 > 资讯 > 前端开发 > html >LeetCode题解之如何删除链表倒数第n个结点
  • 805
分享到

LeetCode题解之如何删除链表倒数第n个结点

2024-04-02 19:04:59 805人浏览 泡泡鱼
摘要

这篇文章主要讲解了“LeetCode题解之如何删除链表倒数第n个结点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LeetCode题解之如何删除链表倒数第n

这篇文章主要讲解了“LeetCode题解之如何删除链表倒数第n个结点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LeetCode题解之如何删除链表倒数第n个结点”吧!

题目:删除链表倒数第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]

解法一

首先容易想到的办法就是想数组一样,遍历链表找到那个要被删除的结点,所以先解决两个问题:

1、获取链表的总长度

public int getLength(Listnode head){         int n=0;         while(head!=null){             n++;             head=head.next;         }         return n;     }

2、找到结点之后,怎么删除。

其实就是把next指向跨过去要删除的结点就行了。

tempNode.next=tempNode.next.next;

但是,上述这个方法是删除的tempNode.next结点,如果我们要删除tempNode本身这个结点,那么就要把一开始的结点提前到第一个结点之前。

比如我们要删除链表的第一个结点,如果你本身的指针就指向第一个结点,那么通过上面这个删除方法就永远删除不了第一个结点了。

所以要把指针提前到第一个结点之前。

所以,综上所述,我们得出以下解法:

 class Solution {     public ListNode removeNthFromEnd(ListNode head, int n) {         int length=getLength(head);         //新建一个新的链表结点指向head头结点,也就是上面要注意的特殊情况         ListNode lastNode=new ListNode(0,head);         ListNode tempNode=lastNode;         for(int i=0;i<length-n;i++){             tempNode=tempNode.next;         }         tempNode.next=tempNode.next.next;         return lastNode.next;     }      public int getLength(ListNode head){         int n=0;         while(head!=null){             n++;             head=head.next;         }         return n;     } }

时间复杂度

用到了遍历、时间复杂度为O(n)

空间复杂度

只用到几个单独的链表结点,所以空间复杂度为O(1)

解法二

再想想,可不可以不计算链表长度呢?也就是题目上所说的进阶解法,用一次扫描。

再链表中,有一种常用的方法,叫做快慢指针,意思就是用到两个速度不同的指针解决一些问题。

比如这个题中,我们使用一个快指针一个慢指针,并且让快指针快n个结点,然后两个指针一直往后移动。当快指针移动到结尾,那么慢指针的位置就是我们要删除的结点了。

当然,这里也要考虑到当前结点被删除的情况,所以要把开始结点提前到链表之前。public ListNode removeNthFromEnd(ListNode head, int n) {  //提前链表         ListNode LastNode=new ListNode(0,head);         ListNode FirstNode=LastNode;         ListNode SecondNode=head;         for(int i=0;i<n;i++){             SecondNode=SecondNode.next;         }          while(SecondNode!=null){             FirstNode=FirstNode.next;             SecondNode=SecondNode.next;         }          FirstNode.next=FirstNode.next.next;                  return LastNode.next;     }

感谢各位的阅读,以上就是“LeetCode题解之如何删除链表倒数第n个结点”的内容了,经过本文的学习后,相信大家对LeetCode题解之如何删除链表倒数第n个结点这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: LeetCode题解之如何删除链表倒数第n个结点

本文链接: https://lsjlt.com/news/83796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • LeetCode题解之如何删除链表倒数第n个结点
    这篇文章主要讲解了“LeetCode题解之如何删除链表倒数第n个结点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LeetCode题解之如何删除链表倒数第n...
    99+
    2024-04-02
  • C++进阶练习删除链表的倒数第N个结点详解
    目录1.链接2.题目描述3.解题思路4.题解1.链接 19. 删除链表的倒数第 N 个结点. 2.题目描述 3.解题思路 方法一 1.在对链表进行操作时,一种常用的技巧是添加一个哑...
    99+
    2024-04-02
  • C++实现LeetCode(19.移除链表倒数第N个节点)
    [LeetCode] 19. Remove Nth Node From End of List 移除链表倒数第N个节点 Given a linked list, remove the...
    99+
    2024-04-02
  • List怎么删除链表的倒数第N个节点
    本篇内容介绍了“List怎么删除链表的倒数第N个节点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:删除链表的倒数第N个节点题目给定一个...
    99+
    2023-06-19
  • C++实现移除链表倒数第N个节点
    这篇文章主要讲解了“C++实现移除链表倒数第N个节点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现移除链表倒数第N个节点”吧! Remove Nth Node From ...
    99+
    2023-06-20
  • 怎么找到链表的倒数第n个结点
    本篇内容主要讲解“怎么找到链表的倒数第n个结点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么找到链表的倒数第n个结点”吧!什么意思呢我们以下面这个链表为例:...
    99+
    2024-04-02
  • 如何利用Java输出链表中倒数第k个结点
    目录前言问题描述方法一方法描述动画演示代码如下方法二 方法描述动画演示代码如下总结前言 链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组...
    99+
    2024-04-02
  • php如何删除数组第n个元素
    这篇“php如何删除数组第n个元素”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何删除数组第n个元素”文章吧。在ph...
    99+
    2023-06-30
  • LeetCode题解之怎么求链表的中间结点
    本篇内容介绍了“LeetCode题解之怎么求链表的中间结点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题...
    99+
    2024-04-02
  • C++解决输出链表中倒数k个结点的问题
    目录题目描述示例解题思路测试代码补充题目描述 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链...
    99+
    2024-04-02
  • Java数据结构之删除链表中重复的结点
    目录解析一:(不提倡)解析二:(正解)核心考点:链表操作,临界条件检查,特殊情况处理 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。...
    99+
    2024-04-02
  • C++ 解决求两个链表的第一个公共结点问题
    目录题目描述:输入描述:返回值描述:示例:解题思路:补充题目描述: 输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试...
    99+
    2024-04-02
  • C语言中如何实现单链表删除指定结点
    目录单链表删除指定结点链表的删除结点(各种方法)链表中删除第i个结点删除与链表中与a相同的结点删除链表中重复元素单链表删除指定结点 在单链表中删除指定的结点。这里单链表是用尾插法建立...
    99+
    2024-04-02
  • 如何使用C#算法解决求第n个数值问题
    这篇文章主要为大家展示了“如何使用C#算法解决求第n个数值问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用C#算法解决求第n个数值问题”这篇文章吧。已知数列:1,1,2,3,5,8,1...
    99+
    2023-06-18
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作