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

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

相关推荐
aqiu1111118 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
2601_9622974812 小时前
在python3中、下列输出变量a的正确写法是_2020超星大数据Python免费答案
数据结构·python·算法·编程·字符串操作
shehuiyuelaiyuehao13 小时前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
啵啵啵鱼14 小时前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
YSL07012415 小时前
时间复杂度和空间复杂度
数据结构
洋不写bug15 小时前
链表面试笔试经典题目详细解析,题目多解法,复杂度分析
数据结构·链表·面试
白狐_79817 小时前
408 数据结构|KMP做题方法:next、nextval和高频易错点
数据结构·算法
来一碗刘肉面19 小时前
平衡二叉树的删除
数据结构·算法
wabs66619 小时前
关于二叉树【力扣199.二叉树的右视图的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
hope_wisdom19 小时前
C/C++数据结构之二叉树的遍历
c语言·数据结构·c++·二叉树·深度优先·广度优先