栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

原题链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

双指针解法或者快慢指针

实质上类似于做了一个减法,我们设从后往前数为倒序号,从前往后为正序号,那么 倒序号(1为起始下标)+正序号(1为起始下标)-1=总长度 ,由此公式可得:

  1. fast指针首先移动k个位置。
  2. slow指针和fast指针也一起移动,移动的基准为fast指针到底。
  3. 那么slow指针就刚好到我们要删除的元素的前一个位置。
  4. 以slow为基准,执行链表删除操作即可。

由于链表具有头节点,那么上面的公式不应该减一,相当于正序号是从0开始的。

代码如下:

		
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast = head;
        ListNode slow = head;
        //fast移n步,目的是为了判断删除的位置
        for (int i = 0; i < n; i++) {
            fast = fast.next;
        }
        //如果fast为空,表示删除的是头结点
        if (fast == null) {
            return head.next;
        }

        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
        //当前slow为要删除的第k个节点第前一个节点
        slow.next = slow.next.next;
        return head;
    }
递归解法

TODO

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号