19. Remove Nth Node From End of List
Source: https://leetcode.com/problems/remove-nth-node-from-end-of-list/
Intuition
Naive Solution: Use len−n pass recursion.
- Get the length of the linked list
- calculate the removal position
- Use recursion version of removal function
| class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int key = length(head) - n + 1;
return removeNthFromStart(head, key);
}
private int length(ListNode head) {
int size = 0;
while (head != null) {
size++;
head = head.next;
}
return size;
}
private ListNode removeNthFromStart(ListNode head, int n) {
if (n == 1) {
return head.next;
}
return new ListNode(head.val, removeNthFromStart(head.next, n - 1));
}
}
|
Approach
- Calculate the length of linked list
- Traverse the linked list using loop, when arrive the removal position, simply jump to the next node.
- Get removed linked list.
Complexity
- Time complexity: O(n)
- Space complexity: O(1)
Code
| class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode memo = null;
int size = 0;
int count = 0;
while (head != null) {
size++;
memo = new ListNode(head.val, memo);
head = head.next;
}
while (size > 0) {
count++;
if (count == n) {
memo = memo.next;
size--;
continue;
}
head = new ListNode(memo.val, head);
memo = memo.next;
size--;
}
return head;
}
}
|