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,每天搞一道 。

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

相关推荐
祖力5518 分钟前
快速学会数据结构中的链式队列与循环队列
linux·c语言·数据结构·算法
布莱克6052 小时前
理解B+树:原理、特性与应用场景
数据结构·数据库·mysql
晚风叙码3 小时前
C++哈希表实现:开放定址法和链地址法 (哈希桶)
数据结构·c++·哈希算法·散列表
imaol13 小时前
哈希表--数据结构
数据结构·散列表
Nil20816 小时前
leetcode 160相交链表
算法·leetcode·链表
Herbert_hwt18 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
晚风醉蝶19 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ19 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
有点。19 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
LuminousCPP20 小时前
栈和队列专题(一):LeetCode 20. 有效的括号
数据结构·经验分享·笔记·leetcode·手写栈