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;
}
}