Showing posts with label RemoveNthNodeFromEnd. Show all posts
Showing posts with label RemoveNthNodeFromEnd. Show all posts

Saturday, March 20, 2021

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]
Solution:

public ListNode removeNthFromEnd(ListNode head, int n) {

        if(head == null)

            return head;        

        ListNode dummy = new ListNode(0);

        dummy.next = head;        

        ListNode first, second;

        first=second=dummy;

        for(int i=0; i<n+1; i++) {

            first=first.next;

        }

        while(first!=null){

            first=first.next;

            second=second.next;

        }

        // Remove nth node from end

        second.next = second.next.next;

        return dummy.next;

    }

Monday, March 6, 2017

Remove Nth Node From End of List

Given a linked list, remove the nth 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.
Sol:

 public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode start = new ListNode(0);
        ListNode first=start, second=start;
        start.next = head;
     
        // Move n nodes
        for (int i=0; i<=n; i++) {
            first = first.next;
        }
        // Move both pointers one node at a time until end of list
        while(first!=null) {
           first = first.next;
           second = second.next;
        }
       
       // remove nth node from end
       second.next = second.next.next;
       return start.next;
    }