Question

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?

Difficulty:Medium

Category:Two Points

Analyze

Solution

class Solution {
 public:
  ListNode* removeNthFromEnd(ListNode* head, int n) {
    ListNode *slow = head, *fast = head;
    while (fast && n--) fast = fast->next;
    if (!fast) return head->next;

    while (fast->next) {
      fast = fast->next;
      slow = slow->next;
    }

    slow->next = slow->next->next;
    return head;
  }
};
By guozetang            Updated: 2020-09-19 13:02:30

results matching ""

    No results matching ""