2021-04-18 Daily-Challenge

Today is Sunday, I gonna review the tasks I've done this week, and finish today's leetcode's April LeetCoding Challenge with cpp.

April LeetCoding Challenge 18

Description

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:

img

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

class Solution {
public:
  ListNode* removeNthFromEnd(ListNode* head, int n) {
    ListNode *newHead = new ListNode(-1, head);
    ListNode *tail = newHead;
    ListNode *del = newHead;
    while(n--) tail = tail->next;
    while(tail->next) {
      tail = tail->next;
      del = del->next;
    }
    del->next = del->next->next;
    return newHead->next;
  }
};