leetcode刷题:链表05 (删除链表的倒数第 N 个结点)

87 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

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

力扣题目链接

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

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

示例 1:

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

输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:

输入:head = [1], n = 1 输出:[] 示例 3:

输入:head = [1,2], n = 1 输出:[1]

蛮简单的,主要是老师上课讲过hhhh,十分钟一遍AC,一发入魂。 总体思路:一个当前结点,一个当前结点后n步的结点。

package com.programmercarl.linkedlist;
import com.programmercarl.linkedlist.domain.ListNode;

/**
 * @ClassName RemoveNthFromEnd
 * @Descriotion https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
 * @Author nitaotao
 * @Date 2022/6/19 13:06
 * @Version 1.0
 * 19. 删除链表的倒数第 N 个结点
 **/
public class RemoveNthFromEnd {
    public static void main(String[] args) {
        ListNode node8 = ListNode.builder().val(8).next(null).build();
        ListNode node7 = ListNode.builder().val(7).next(node8).build();
        ListNode node6 = ListNode.builder().val(6).next(node7).build();
        ListNode node5 = ListNode.builder().val(5).next(node6).build();
        ListNode node4 = ListNode.builder().val(4).next(node5).build();
        ListNode node3 = ListNode.builder().val(3).next(node4).build();
        ListNode node2 = ListNode.builder().val(2).next(node3).build();
        ListNode node1 = ListNode.builder().val(1).next(node2).build();
        System.out.println(removeNthFromEnd(node1,1));
    }

    /**
     * 19. 删除链表的倒数第 N 个结点
     *
     * @param head
     * @param n
     * @return
     */
    public static ListNode removeNthFromEnd(ListNode head, int n) {
        //链表结点数量
        int size = 0;
        ListNode index = head;
        while (index != null) {
            size++;
            index = index.next;
        }
        if (n == size) {
            return head.next;
        }
        if (n == 0) {
            return head;
        }
        if (n > size) {
            return head;
        }

        int distance = 0;

        ListNode curNode = head;
        //当前结点的后n位置的结点,当nextNNode==null,当前结点则断开下一个结点
        ListNode nextNNode = head;

        while (distance <= n) {
            distance++;
            nextNNode = nextNNode.next;
        }
        while (nextNNode != null) {
            curNode = curNode.next;
            nextNNode = nextNNode.next;
        }
        curNode.next = curNode.next.next;
        return head;
    }
}

在这里插入图片描述