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

简介

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

解决方式:链表 + 双指针

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

推荐看自在飞花(141)、灵茶山艾府大佬的讲解。

双指针

解题思路:此题略有不同,由于可能存在链表头节点就是倒数第 n 个节点的情况,所以我们需要在双指针的基础上在创建一个伪头节点,方便后续可能删除头节点。再者,此题双指针并不是一般上的一块一慢,而是固定一个长度。这样迭代到终止条件时,后节点就可以指向倒数第 n 个节点或者倒数第 n 个节点的上一个节点。

java 复制代码
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // 伪头节点,解决删除链表头节点的情况
        ListNode t = new ListNode(0,head);
        ListNode pre = t;
        ListNode cur = t;
        // 前驱节点往后移动 n 次
        while(n-- > 0){
            pre = pre.next;
        }
        // 两节点保持相同的距离向后移动
        while(pre.next != null){ 
        		 // 防止后节点直接指向倒数第 n 个节点
        		 // 若想直接指向倒数第 n 个节点,可以 pre != null。
            pre = pre.next;
            cur = cur.next;
        }
        // 此时,后节点指向倒数第 n 个节点的前一个节点
        // 移除倒数第 n 个节点
        cur.next = cur.next.next;
        // 返回结果
        return t.next;
    }
}
相关推荐
IT探索3 分钟前
Linux 查找文件指令总结
linux·算法
Lumos1861 小时前
51单片机从零到实战(完结)——后续学习路线建议
算法
稚南城才子,乌衣巷风流1 小时前
DFS序详解:原理、应用与实现
算法·深度优先·图论
稚南城才子,乌衣巷风流1 小时前
动态树(Dynamic Tree)数据结构详解
数据结构·算法
zander2582 小时前
114. 二叉树展开为链表
数据结构·链表·深度优先
变量未定义~2 小时前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗2 小时前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
LONGZETECH2 小时前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
自学小白菜2 小时前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
学废了wuwu2 小时前
从入门到实战:深入浅出模型压缩三大核心——剪枝、彩票假设与知识蒸馏
人工智能·算法·剪枝