19. 删除链表的倒数第 N 个结点

思路是快慢指针,快指针比慢指针先走N步,当快指针的next为null时,快指针刚好指向待删除元素的上一个节点!
:19. 删除链表的倒数第 N 个结点


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast=head,slow=head;
        if(head==null||n<0){
            return head;
        }
        int nums=n;
        while(nums>0&&fast.next!=null){
            fast=fast.next;
            --nums;
        }
        //还没走完N步就退出循环,说明要删除第一个元素!
        //删除第一个元素
        if(nums>=1){
            head = slow.next;
            return head;
        }
        while(fast!=null&&fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }
        slow.next=slow.next.next;
        return head;
    }
}

你可能感兴趣的:(LeetCode题库,链表,双指针,快慢指针)