[LeetCode] 19. Remove Nth Node From End of List

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

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.

Follow up:

Could you do this in one pass?

Analyse:

Solution:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */

//1->2->3->4->5->6, n = 2;
//=> 1->2->3->4->6

class Solution {
    func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 
        var output = ListNode(0);
        output.next = head;
        var fast:ListNode? = output;
        var slow:ListNode? = output;
        
        for i in 0..<n {
            fast = fast!.next
        }
        
        while(fast?.next != nil) {
            fast = fast!.next
            slow = slow!.next 
        }
        
        slow!.next = slow!.next?.next
        return output.next;  
    }
}

Last updated