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.
Note:
Given n will always be valid.
Try to do this in one pass.
//1.链表为空或n不大于0 ; 2.设置两个指针,fast和slow。fast先走n步。3.删除节点考虑三种情况,当倒数第n个节点是头节点, 或者为尾节点,或者时中间节点。三种情况 4.最后一种情况,n大约链表中节点的个数
ListNode *removeNthFromEnd(ListNode *head, int n)
{
if(head == NULL || n <= 0)
return head;
ListNode* slow = head;
ListNode* fast = head;
int i = 0;
while(i < n)
{
fast = fast->next;
i++;
if(fast == NULL)
break;
}
if(i == n)
{
if(fast == NULL)
{
ListNode* resultHead = head->next;
delete head;
return resultHead;
}
else
{
while(fast->next)
{
slow = slow->next;
fast = fast->next;
}
ListNode* deleteNode = slow->next;
slow->next = deleteNode->next;
delete deleteNode;
return head;
}
}
else
{
return head;
}
}