19. Remove Nth Node From End of List

Problem

Given a linked list, remove the node from the end of list and return its head.

For example

   Given linked list: 1->2->3->4->5, and n = 2.

   After removing the second node from the end, the linked list becomes 1->2->3->5.

Note: Given n will always be valid. Try to do this in one pass.

Related Topics:

Linked List Two Pointers

Analysis

设置两个点,其间隔为 n,之后同步移动点 frontback,当 front 到达末尾时,back 正好达到操作位置。

Code

/**
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int = 0) {
 *     var next: ListNode? = null
 * }
 */
class Solution {

    fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {

        val nhead: ListNode? = ListNode(0)
        nhead?.next = head

        var front = nhead
        for (i in 1..n) {
            front = front?.next
        }

        var back = nhead
        while (front?.next != null) {
            front = front.next
            back = back?.next
        }

        front = back?.next
        back?.next = back?.next?.next
        front?.next = null

        return nhead?.next
    }
}

Last updated