02链表:19、删除链表的倒数第N个节点

19、删除链表的倒数第N个节点

文章目录

    • 19、删除链表的倒数第N个节点
      • 方法一:快慢指针

思路:使用虚拟头节点+快慢指针,fast指针先走n+1,直到为null,slow节点刚好在删除元素前一个位置,方便操作
02链表:19、删除链表的倒数第N个节点_第1张图片

重点:因为只会删除一个元素,所以只需要取慢指针的下下个元素,下个元素就会被删除

方法一:快慢指针

    public ListNode removeNthFromEnd(ListNode head, int n) {

        // 构建虚拟头节点
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;

        //快慢指针同时处于初始位置
        ListNode fast = dummyHead;
        ListNode slow = dummyHead;

        // fast指针先走n+1步
        for (int i = 0; i < n + 1; i++) {
            fast = fast.next;
        }

        //让fast指针走到末尾,slow指针刚好在要删除元素的前一个位置
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }

        //前面走完了,现在开始处理(只会删除一个节点,所以连接slow的下下个节点就可以)
        slow.next = slow.next.next;

        return dummyHead.next;
    }

02链表:19、删除链表的倒数第N个节点_第2张图片

你可能感兴趣的:(算法,链表,数据结构,java)