leetcode19. 删除链表的倒数第N个节点

问题描述:

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

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

分析:一个指针先走k+1次,然后和另一个kNode指针一起往后走,最后删除kNode.next即可。

注意i:判空(k==链表长度的情况,走k+1次会空指针)
上代码,拿去即可运行:

java 复制代码
package onlyqi.daydayupgo06.leetcode;

import lombok.AllArgsConstructor;
import lombok.Data;

public class Leetcode19 {


    public static void main(String[] args) {
        ListNode listNode6 = new ListNode(6, null);
        ListNode listNode5 = new ListNode(5, listNode6);
        ListNode listNode4 = new ListNode(4, listNode5);
        ListNode listNode3 = new ListNode(3, listNode4);
        ListNode listNode2 = new ListNode(2, listNode3);
        ListNode listNode1 = new ListNode(1, listNode2);
        ListNode listNode = removeNthFromEnd(listNode1, 2);
        while (listNode != null) {
            System.out.print(listNode.val + "   ");
            listNode = listNode.next;
        }
    }
    //dummy ──┐
    //        ├─► ListNode(0) ──► next ──► head
    //slow ───┘

    public static ListNode removeNthFromEnd(ListNode head, int n) {
        // 删除头节点必须
        ListNode dummy = new ListNode(0, head);
        ListNode slow = dummy;
        ListNode fast = dummy;
        for (int i = 0; i < n; i++) {
            fast = fast.next;
        }
        // 快的下一个节点为null,就已经是走完N个了
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;

        return dummy.next;

    }

    @Data
    @AllArgsConstructor
    static class ListNode {
        int val;
        ListNode next;


    }
}

运行结果:

我要刷300道算法题,第149道 。 尽快刷到200,每天搞一道 。

迷茫不知道学习什么的时候,就写算法吧

相关推荐
生成论实验室4 小时前
用事件关系网络重新理解AI(二):损失函数、优化器与深度学习的动力学
数据结构·人工智能·深度学习·算法·语言模型
阿文的代码库5 小时前
线段树入门:算法分析
数据结构·算法
悠仁さん6 小时前
数据结构 树 二叉树 堆 (堆的模拟实现篇)
数据结构
此生决int6 小时前
算法从入门到精通——位运算
数据结构·c++·算法·蓝桥杯
计算机安禾6 小时前
【算法分析与设计】第4篇:分治策略的理论框架与经典案例
数据结构·算法·排序算法
Kiling_07046 小时前
面向对象和集合编程题 ( 二 )
java·开发语言·数据结构·算法
过期动态6 小时前
【LeetCode 热题 100】两数之和— 暴力法与哈希表法详解
java·数据结构·算法·leetcode·散列表
Pointer Pursuit6 小时前
哈希表的实现
数据结构·哈希算法·散列表
故事和你916 小时前
洛谷-【动态规划1】动态规划的引入4
开发语言·数据结构·c++·算法·动态规划·图论
qq_296553277 小时前
[特殊字符] 旋转排序数组中的高效搜索:从线性到二分查找的进阶之路
数据结构·算法·搜索引擎·分类·柔性数组