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

题目:删除链表的倒数第N个节点

问题描述:

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

解决思路:

删除链表的倒数第 n 个节点即是删除链表的顺数第 (size-n+1) 个节点(size为链表的长度),所以我们可以利用快慢指针来解决此问题:先让快指针走 n 步,剩余的即可由快慢指针一起走,当快指针走到末尾时,待删除的元素就位于慢指针的下一个元素。

解决代码:


public ListNode removeNthFromEnd(ListNode head, int n) {
    ListNode fast = head;
    ListNode slow = head;
    for(int i = 0; i < n; i++) {
        fast = fast.next;
    }

    if(fast == null) {
        return head.next;
    }

    while(fast.next != null) {
        fast = fast.next;
        slow = slow.next;
    }

    slow.next = slow.next.next;

    return head;
}

posted @ 2020-07-12 14:11  samsaraaa  阅读(93)  评论(0编辑  收藏  举报