Search

Remove Nth Node From End of List

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

Follow up: Could you do this in one pass?


Example 1:

Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1
Output: []

Example 3:

Input: head = [1,2], n = 1
Output: [1]

Constraints:

  • The number of nodes in the list is sz.

  • 1 <= sz <= 30

  • 0 <= Node.val <= 100

  • 1 <= n <= sz

Solution:



Approach 1:


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) 
    {
        int length=0;
        ListNode dummy=head;
        while(dummy!=null)
        {
            length++;
            dummy=dummy.next;
        }
        
        if(n>length) return dummy;
        if(n==length) return head.next;
        length-=n;
       
        dummy=head;
        while(length>1 && dummy.next!=null)
        {
            dummy=dummy.next;
            length--;
        }
        dummy.next=dummy.next.next;
        return head;
    }
}


Approach 2:


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode fast = dummy;
    ListNode slow = dummy;
    for (int i = 1; i <= n + 1; i++) {
        fast = fast.next;
    }
    while (fast != null) {
        fast = fast.next;
        slow = slow.next;
    }
    slow.next = slow.next.next;
    return dummy.next; 
    } 
    } 


 


9 views0 comments

Recent Posts

See All

A string s is called good if there are no two different characters in s that have the same frequency. Given a string s, return the minimum number of characters you need to delete to make s good. The f

The numeric value of a lowercase character is defined as its position (1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.