bool ListDelete(ListNode * &L, int i,int &e)
{
if (i == 0)
{
L = L->next;
return L;
}
int j = 0;
ListNode *p = L, *q;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
q = p->next;
if (q == NULL)
return false;
e = q->val;
p->next = q->next;
free(q);
return true;
}
}
ListNode* removeNthFromEnd(ListNode* head, int n)
{
int len = 0;
ListNode* p = head;
ListNode* R = head;
while (p)
{
len++;
p = p->next;
}
int e;
if ((len - n) < 0)
return NULL;
else if (len == 1 && n == 1)
return NULL;
else ListDelete(R, len - n, e);
return R;
}
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ArrayList<Integer> list=new ArrayList<>();
while (head!=null)
{
list.add(head.val);
head=head.next;
}
list.remove(list.size()-n);
int i=1;int len=list.size();
if(len==0)
return null;
ListNode h=new ListNode(list.get(0));
ListNode o=h;
while (i<len)
{
ListNode t=new ListNode(list.get(i));
o.next=t;
o=o.next;
i++;
}
return h;
}
}