给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
通过快慢指针的方法,依次遍历链表完成删除步骤,首先fast指针移动n次,然后fast指针和slow指针同时移动直到fast指针指向最后一个节点,此时slow指针指向倒数第n+1个节点。
ListNode* Solution::removeNthFromEnd(ListNode* head, int n)
{
ListNode *pfast = head;
ListNode *pslow = head;
unsigned int index = 0;
if(head->next == NULL)
{
return head->next;
}
for(index = 0; index < n; index ++)
{
pfast = pfast->next;
if(pfast == NULL)
{
return head->next;
}
}
while(pfast->next != NULL)
{
pfast = pfast->next;
pslow = pslow->next;
}
/*pfast指向最后一个元素,pslow指向要删除的元素的前一个元素*/
pslow->next = pslow->next->next;
return head;
}
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。
