【算法系列-链表】删除链表的倒数第N个结点

【算法系列-链表】删除链表的倒数第N个结点

文章目录

  • 【算法系列-链表】删除链表的倒数第N个结点
    • [1. 算法分析🛸](#1. 算法分析🛸)
    • [2. 模拟解决问题](#2. 模拟解决问题)
      • [2.1 思路分析🎯](#2.1 思路分析🎯)
      • [2.2 代码示例🌰](#2.2 代码示例🌰)
    • [3. 双指针(快慢指针)解决问题](#3. 双指针(快慢指针)解决问题)
      • [3.1 思路分析🎯](#3.1 思路分析🎯)
      • [3.2 代码示例🌰](#3.2 代码示例🌰)

【题目链接】 LeetCode 19 删除链表的倒数第N个结点

1. 算法分析🛸

这道题的关键点在于找到删除节点的位置,而题目提供给我们的是倒数第n个节点的位置,对此我们需要通过操作找到这倒数第n个节点,这里我提供两种方法:模拟 & 双指针

2. 模拟解决问题

2.1 思路分析🎯

通过一轮循环遍历来获取链表的长度 size ,而 size - n

的位置就是目标删除节点的前一个节点,通过它来删除目标节点即可

2.2 代码示例🌰

java 复制代码
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode vhead = new ListNode();
        vhead.next = head;
        ListNode cur = vhead;
        int size = 0;
        while (cur != null && cur.next != null) {
            cur = cur.next;
            size++;
        }
        cur = vhead;
        for (int i = 0;i < size - n;i++) {
            cur = cur.next;
        }
        cur.next = cur.next.next;
        return vhead.next;
    }
}

3. 双指针(快慢指针)解决问题

3.1 思路分析🎯

这里使用了双指针 (快慢指针)来解决问题,定义快慢指针先指向虚拟头节点,之后让 fast 先走 n + 1 步(这里比n 多走一步是为了让slow到达删除节点的前一个节点,方便我们进行节点删除操作),后让slow 和 fast 同时往后遍历,直到 fast 指向空,此时slow所处位置的下一个节点就是目标删除节点,进行删除操作即可

通过图解大家能更好理解:

3.2 代码示例🌰

java 复制代码
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode vhead = new ListNode();
        vhead.next = head;
        ListNode fast = vhead;;
        ListNode slow = vhead;
        for (int i = 0;i <= n;i++) {
            fast = fast.next;
        }
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return vhead.next;
    }
}

以上便是对删除链表的倒数第N个结点类型题的介绍了!!后续还会继续分享其它算法系列内容,如果这些内容对大家有帮助的话请给一个三连关注吧💕( •̀ ω •́ )✧( •̀ ω •́ )✧✨

相关推荐
zephyr0533 分钟前
动态规划-最长上升子序列问题
算法·动态规划
闪电悠米1 小时前
力扣hot100-56.合并区间-排序详解
数据结构·算法·leetcode·贪心算法·排序算法
卡提西亚2 小时前
leetcode-1438. 绝对差不超过限制的最长连续子数组
算法·leetcode·职场和发展
Java面试题总结2 小时前
LeetCode 93.复原IP地址
算法·leetcode·职场和发展·.net
从零开始的代码生活_3 小时前
C++ 多态详解:虚函数、动态绑定、抽象类与虚表原理
开发语言·c++·后端·学习·算法
yuannl103 小时前
图的存储方式
数据结构
泷寂3 小时前
最小生成树 (MST基础)
算法
Daniel_1234 小时前
数组——总结篇
算法
不懒不懒4 小时前
【针对路面识别数据集,结合三轴加速度标准化数据及多路面识别需求,以下是算法选择与处理方案】
算法
Reart4 小时前
Leetcode 121. 买卖股票的最佳时机(717)
后端·算法