美文网首页
19. 删除链表的倒数第 N 个结点

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

作者: Abeants | 来源:发表于2022-02-25 21:52 被阅读0次

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

    示例 1:



    输入:head = [1,2,3,4,5], n = 2
    输出:[1,2,3,5]

    示例 2:
    输入:head = [1], n = 1
    输出:[]

    示例 3:
    输入:head = [1,2], n = 1
    输出:[1]

    提示:
    链表中结点的数目为 sz
    1 <= sz <= 30
    0 <= Node.val <= 100
    1 <= n <= sz

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路及方法

    快慢指针的方法,找到倒数第n+1个节点,链接倒数第n+1个节点和倒数n-1个节点。注意的是当快指针移动完后,如果快指针为空,代表需要删除的是第一个节点,直接返回头节点的下一个节点即可。

    /**
     * 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 slow = head;
    
            while (n-- != 0) {
                fast = fast.next;
            }
            // fast为空代表删除第一个节点
            if (fast == null) return head.next;
            // 找到倒数第n + 1个节点
            while (fast.next != null) {
                fast = fast.next;
                slow = slow.next;
            }
            slow.next = slow.next.next;
    
            return head;
        }
    }
    

    结果如下:

    相关文章

      网友评论

          本文标题:19. 删除链表的倒数第 N 个结点

          本文链接:https://www.haomeiwen.com/subject/rlefrrtx.html