给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *np;
struct ListNode *node=NULL;
int listlen=0;
int first=0;
int last=0;
int inode=0;
np=head;
while(np)
{
listlen++;
np=np->next;
}
np=head;
last=listlen;
first=listlen-last+1;
while(np)
{
inode++;
if((inode==1)&&(n==last))
{
head=head->next;
free(np);
return head;
}
if((n==first)&&(inode==listlen-n))
{
node=np->next;
free(node);
np->next=NULL;
return head;
}
if((first<n<last)&&(inode==listlen-n))
{
node=np->next;
np->next=node->next;
free(node);
return head;
}
np=np->next;
}
return NULL;
}