牛客Top200---删除链表中倒数第n个结点(java详解)
Posted 小样5411
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---删除链表中倒数第n个结点(java详解)相关的知识,希望对你有一定的参考价值。
题目
思路总结:思路可借鉴上面,只是多加一个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详解)的主要内容,如果未能解决你的问题,请参考以下文章
删除链表的倒数第n个节点(NC53/考察次数Top19/难度中等)