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

Posted 可持续化发展

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19. 删除链表的倒数第 N 个结点 Java相关的知识,希望对你有一定的参考价值。

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

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

示例 1:


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

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

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

处理链表类的问题,对于链表头节点可能变化的情况,就加一个虚拟头节点,减少特殊情况的处理。

链表的问题一定要画图。

 

 

 破解版

/**
 * Definition for singly-linked list.
 * public class ListNode 
 * int val;
 * ListNode next;
 * ListNode() 
 * ListNode(int val)  this.val = val; 
 * ListNode(int val, ListNode next)  this.val = val; this.next = next; 
 * 
 */
class Solution 
    public ListNode removeNthFromEnd(ListNode head, int n) 
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        //k 代表 dummy链表中一共有多少个节点
        int k = 0;
        for (ListNode p = dummy; p != null; p = p.next) k++;
        ListNode p = dummy;
        /**
         * 因为加了虚拟头节点,
         * 因此,数学规律是
         * 要删除倒数第 n 个节点,则(在加了虚拟头节点后)
         * 指针要从虚拟头节点开始往后移动 k - n - 1 次。
         */
        for (int i = 0; i < k - n - 1; i++) 
            p = p.next;
        
        p.next = p.next.next;
        return dummy.next;
    

纯净版

/**
 * Definition for singly-linked list.
 * public class ListNode 
 * int val;
 * ListNode next;
 * ListNode() 
 * ListNode(int val)  this.val = val; 
 * ListNode(int val, ListNode next)  this.val = val; this.next = next; 
 * 
 */
class Solution 
    public ListNode removeNthFromEnd(ListNode head, int n) 
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        int k = 0;
        for (ListNode p = dummy; p != null; p = p.next) k++;
        ListNode p = dummy;
        for (int i = 0; i < k - n - 1; i++) 
            p = p.next;
        
        p.next = p.next.next;
        return dummy.next;
    

以上是关于19. 删除链表的倒数第 N 个结点 Java的主要内容,如果未能解决你的问题,请参考以下文章

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

我用java刷 leetcode 19. 删除链表的倒数第N个结点

精选力扣500题 第53题 LeetCode 19. 删除链表的倒数第 N 个结点c++/java详细题解

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

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

算法leetcode|19. 删除链表的倒数第 N 个结点(rust重拳出击)