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

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

相关推荐
琢磨先生David3 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
qq_454245033 天前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝3 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
岛雨QA3 天前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc3 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
wefg13 天前
【算法】单调栈和单调队列
数据结构·算法
岛雨QA3 天前
图「Java数据结构与算法学习笔记12」
数据结构·算法
czxyvX3 天前
020-C++之unordered容器
数据结构·c++
岛雨QA3 天前
多路查找树「Java数据结构与算法学习笔记11」
数据结构·算法
AKA__Zas3 天前
初识基本排序
java·数据结构·学习方法·排序