Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head
For example,
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(NULL == head || n<=0)
{
return head;
}
int len = 0;
ListNode* p1 = head;
while(p1)
{
len++;
p1 = p1->next;
}
//cout<<len<<endl;
if(n > len)
{
return head;
}
else if(len == n) //当恰巧删除的是第一个节点,则直接返回head->next
{
return head->next;
}
else{ //注意一下要删除的节点是p1所指的下一个节点
p1 = head;
int num = 0;
while(p1->next)
{
num++;
if(num != len-n)
{
p1 = p1->next;
}
else
{
ListNode* tmp = p1->next;
p1->next = tmp->next;
delete tmp;
}
}
}
return head;
}