19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?
图片说明
运行结果
图片说明
解题思路
fast先前进n个,之后和low一起前进。等fast到末尾时,low就是倒数第n个。
java代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast=head;
        ListNode low=head;
        while(n>0){
            fast=fast.next;
            n--;
        }
        //一共n个元素
        if(fast == null){
            return head.next;
        }
        //利用fast.next。使最后low指向倒数第n个元素的前一个元素,便于执行删除操作
        while(fast.next != null){
            fast=fast.next;
            low=low.next;
        }
        low.next=low.next.next;
        return head;
    }
}