一、题目
二、实现
注意:
1. 删除该结点,还需找到该节点的前一个结点
2. 删除的结点,可能是链表中的第一个结点
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) {
if(head == null) return null;
//1. p先遍历前n个节点
ListNode p = head;
ListNode r = head; //最后指向倒数第k个结点
ListNode pre = null; //指向r的前一个结点
for(int i=0;i<n;i++){
p = p.next;
}
//2. 删除的正好是第一个节点(链表中有n个节点)
if(p==null){
return head.next;
}
//3. 查找倒数第k个节点
while(p!=null){
p = p.next;
pre = r;
r = r.next;
}
//2. 删除倒数第n个节点(需找到该节点的前一个结点)
pre.next = r.next;
return head;
}
}