Remove Nth Node From End of List 题解
题目来源: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. Note: Given n will always be valid. Try to do this in one pass.
解题思路:
快慢指针的思路, 先走n步,然后另外一个节点从头开始,直到先走的那个节点到达结尾,第二次从头开始的那个点极为要删除的那个节点。 注意边界条件可能要删除头。
ListNode *removeNthFromEnd(ListNode *head, int n)
{
assert(head != NULL);
//n is valid
int k = 0;
ListNode *headbak = head;
while(k++ < n)
head = head->next;
ListNode * pre = headbak;
if(head == NULL) //delete head
{
ListNode * result = headbak->next;
delete pre;
return result;
}
while(head->next)
{
pre = pre->next;
head = head->next;
}
//delete pre->next;
auto deleted = pre->next;
auto next = deleted->next;
pre->next = next;
delete deleted;
return headbak;
}
Last updated
Was this helpful?