牛客Top200---删除链表中倒数第n个结点(java详解)

Posted 小样5411

tags:

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

题目


[相似扩展:找到链表中倒数第k个结点]

思路总结:思路可借鉴上面,只是多加一个pre指针用于记录倒数第n个节点的前一个节点,即下面代码slow指针的前一个节点

代码

import java.util.*;
public class Solution {
    public ListNode removeNthFromEnd (ListNode head, int n) {
        //1、首先,判断head是否为空,k是否符合要求
        if(head == null || n <= 0){
            return head;
        }
        //2、快慢指针找到倒数第n个节点,快指针先走n-1
        //因为一开始快指针就在head第一个节点,所以n-1,这样fast为null时,slow指向倒数第n个节点
        ListNode fast = head;
        ListNode slow = head;
        for(int i = 0 ; i < n - 1 ; i++){
            fast = fast.next;//往后移动n-1个节点
        }
        ListNode pre = null;
        while(fast.next != null){
            fast = fast.next;
            pre = slow;//当slow将要往后移时,始终记录slow的前一个节点
            slow = slow.next;
        }
        //3、删除倒数第n个节点,考虑只有一个和两个节点的情况(pre=null)
        if(pre != null){
            pre.next = slow.next;
        }else{
            head = head.next;
        }
        //返回链表
        return head;
    }
}

以上是关于牛客Top200---删除链表中倒数第n个结点(java详解)的主要内容,如果未能解决你的问题,请参考以下文章

牛客网高频算法题系列-BM8-链表中倒数最后k个结点

牛客(14)链表中倒数第k个结点

[算法]在单链表和双链表中删除倒数第k个结点

删除链表的倒数第n个节点(NC53/考察次数Top19/难度中等)

[leetcode]19 删除链表的倒数第 N 个结点 | 链表模拟

[leetcode]19 删除链表的倒数第 N 个结点 | 链表模拟