题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
// 双指针,第一个指针放在1,第二个指针放在k
// 再用preNode参数记录slowNode前的数
ListNode preNode = null;
ListNode slowNode = head;
ListNode fastNode = head;
// 将fastNode放在合适的位置
for(int i=0;i<n-1;i++){
fastNode = fastNode.next;
}
// 同步移动(但可能这个方法不会执行,当删除第一个点时,这时preNode就是null会导致错误)
while(fastNode.next != null){
// 更新preNode
preNode = slowNode;
slowNode = slowNode.next;
fastNode = fastNode.next;
}
// 所以这里需要判断preNode是否为空,若为空,说明删除的第一个点,则返回第二个点
if(preNode == null){
return head.next;
}
// 这里是删除中间点的操作
preNode.next = preNode.next.next;
// 最后返回头部即可
return head;
}
}
查看5道真题和解析
