去掉一个单链表的倒数第N个节点
思路很简单,两个指针,一个指针提前跑n个节点,然后再一起奔跑,提前跑的那个到达尾部的时候,后面跑的那个指向倒数第n+1节点。
需要注意一些边界:
- 头指针为空
- n大于链表长度
n等于链表长度
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
if (!head )
{
return NULL;
}
ListNode* forward = head;
ListNode* back = head;
for (int i = 0; i < n ; i++)
forward = forward->next;
if (!forward)
{
return head->next;
}
while (forward->next != NULL)
{
forward = forward->next;
back = back->next;
}
back->next = back->next->next;
return head;
}
};