题解 | 删除链表的倒数第n个节点
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
利用快慢指针+虚拟头节点。
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
public ListNode removeNthFromEnd (ListNode head, int n) {
// write code here
ListNode copyH = head; //快指针
ListNode copyH2 = new ListNode(-1); //虚拟头节点
copyH2.next = head;
ListNode copyH3 = copyH2; //慢指针
for(int i=0;i<n;i++){ //快指针先跑n个节点
if(copyH == null){
return copyH;
}
copyH = copyH.next;
}
while(copyH != null){ //同时跑,当快指针跑完时,慢指针一定位于倒数第n+1个节点上
copyH = copyH.next;
copyH3 = copyH3.next;
}
copyH3.next = copyH3.next.next;//跳过倒数第n个节点
return copyH2.next;//去掉虚拟头节点
}
}
