题解 | #删除链表的倒数第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; } }