链表之leetcode19:删除链表的倒数第N个结点

删除链表的倒数第N个结点
题目描述

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

提示:

  • 链表中的结点的数目为sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz
代码
java 复制代码
/**
 * 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 dummyHead = new ListNode();
        dummyHead.next = head;
        
        // 可以使用两个指针,先让快指针往后移动n个位置,然后慢指针和快指针同时移动,直到快指针指向null,此时慢指针指向的是倒数第n个元素
        // 由于要删除元素,所以我们需要指向要删除元素的前一个元素
        // 所以可以将快指针再往后移动一个元素,也就是总共移动n+1个位置
        ListNode slow = dummyHead;
        ListNode quick = dummyHead;
        n++;
        while(n-- != 0) {
            quick = quick.next;
        }
        // 快慢指针同时移动
        while(quick != null) {
            slow = slow.next;
            quick = quick.next;
        }
        slow.next = slow.next.next;
        return dummyHead.next;
    }
}
相关推荐
jeo陽3 小时前
04-循环实战:素数、最大公约数、级数求和与枚举法
c语言·开发语言·数据结构
slandarer5 小时前
MATLAB | 趣味编程——动态字符串甜甜圈和爱心
数据结构·matlab·趣味编程
UIU1145 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
爱读书的小胖5 小时前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
inrichtt6 小时前
第七课时:STM32时钟系统揭秘:从零理解时钟树
c语言·数据结构·stm32·单片机·嵌入式硬件
xxwl5856 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
Logic1018 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
垆边人似月.9 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫9 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
jeo陽10 小时前
05-数组与冒泡排序:第一个数据结构与经典算法
c语言·数据结构·算法