https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
[lc19]
1 locate node to prior to deleted node.
adjust next pointer to remove deleted node.
2 how to locate deleted node in one scan?
location to pointer change should be done together.
3 look for nth from end node, by iteration, no reverse pointer.
what else and how to reverse?
3 in one scan, can we know nth from end node, for each node?
3 for each node, how to know its nth from end node?
4 dont forget to handle deleted node is first node.
[solution]
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode prev = new ListNode(-1, head);
nth(prev, n);
return prev.next;
}
//helper function, start from end node, what is the nth of current node
int nth(ListNode head, int n){
if(head.next==null){
return 1;
}
int sub = nth(head.next, n);
if(sub==n){
ListNode del = head.next;
//del.next = null;
head.next = del.next;
}
return 1 + sub;
}
}```