【刷题记录】19. 删除链表的倒数第 N 个结点

简介: 【刷题记录】19. 删除链表的倒数第 N 个结点

一、题目描述


来源:力扣(LeetCode)


给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点。


网络异常,图片无法展示
|


输入: head = [1,2,3,4,5], n = 2

输出: [1,2,3,5]


示例 2:


输入:head = [1], n = 1

输出:[]


示例 3:


输入:head = [1,2], n = 1

输出:[1]


提示:


链表中结点的数目为 sz


  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
    进阶: 你能尝试使用一趟扫描实现吗?


二丶思路分析


在删除节点的时候,我们需要知道节点的长度才能确定倒数第n个节点的位置。


如果遍历一次,在查找一次,也能做到。题目进阶的要求是尝试一次扫描来实现。


那么如果一次扫描来实现我们可以借助于类似窗口的概念来实现


  • 这个窗口我们让它是定长 n 的一个窗口,
  • 窗口左边为链表的起点。
  • 然后移动这个窗口,当窗口右边移动到链表的末端节点时候为空时候,窗口的左边指向的即是要被删除的 倒数第n个节点


如示例 1


网络异常,图片无法展示
|


三、代码实现

/**
 * Definition for singly-linked list.
 * public 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 dummy = new ListNode(0, head);
        ListNode R = head;
        ListNode L = dummy;
for (int i =0; i < n; ++i) {
            R = R.next;
        }
while (R != null) {
            R = R.next;
            L = L.next;
        }
        L.next = L.next.next;
        ListNode res = dummy.next;
        return res;
    }
}


复杂度分析


  • 时间复杂度:
    网络异常,图片无法展示
    |
    ,其中 n 是链表的长度
  • 空间复杂度:
    网络异常,图片无法展示
    |


运行结果


网络异常,图片无法展示
|


总结


这个题目也是利用双指针 + 窗口都类似概念(定长的),利用这个窗口的长度和移动,来确定倒数第n个节点所在的位置。来达到一次的遍历实现。

目录
相关文章
|
2月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
76 1
|
1月前
|
存储 算法 搜索推荐
链表的中间结点
【10月更文挑战第24天】链表的中间结点是链表操作中的一个重要概念,通过快慢指针法等方法可以高效地找到它。中间结点在数据分割、平衡检测、算法应用等方面都有着重要的意义。在实际编程中,理解和掌握寻找中间结点的方法对于解决链表相关问题具有重要价值。
21 1
|
2月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
44 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
2月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
56 0
|
2月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
18 0
|
7月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
6月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
6月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
6月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
65 2
|
7月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
62 1