解法
可以通过快指针先走K步 慢指针先指向head,导致 快指针和慢指针相差K个结点,然后快指针移到末尾 这个时候慢指针就是倒数第K个结点了。
然后在遍历的时候 记录下慢指针的前一个结点,用来删除就OK了。
代码
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) {
// write code here
if(head == null){
return null;
}
ListNode p = head;
ListNode q = head;
ListNode pre = null;
while(n>0){
if(p!=null){
p = p.next;
}else{
return null;
}
n--;
}
if(p==null){
return head.next;
}
while(p != null){
p = p.next;
pre = q ;
q = q.next;
if(p ==null){
pre.next = q.next;
}
}
return head;
}
}