根据题目要求, 可以设置两个指针,slow和fast,fast先走n步,之后slow和fast一起走,直到fast为尾结点。
需要注意的是细节问题,比如只有一个元素,或需要删除的元素是第一个结点,这几种特殊的情况可以通过设置一个新的头节点来解决
代码
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode * res = NULL;
if(n==0||head==NULL)
return res;
ListNode *fast, *slow ,*newHead;
newHead = new ListNode(0);
newHead->next = head;
fast = newHead;
slow = newHead;
while(n>0&&fast->next!=NULL)
{
fast = fast->next;
n--;
}
while(fast!=NULL&&fast->next!=NULL&&slow->next!=NULL)
{
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next ->next;
return newHead->next;
}
};
本文介绍了一种使用双指针技巧解决链表中删除倒数第N个节点的问题的方法。通过设置快慢两个指针,先让快指针前进N步,随后快慢指针同步移动,当快指针到达链表尾部时,慢指针恰好位于待删除节点的前一个位置。文中还讨论了特殊情况处理,如链表只有一个元素或需删除头部节点的情况。
632

被折叠的 条评论
为什么被折叠?



