一次遍历
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *dummy = new ListNode(0);
dummy->next = head;
ListNode *first = dummy;
ListNode *second = dummy;
for (int i = 1; i <= n+1; i++)//注意是循环n+1次
first = first->next;
while (first != NULL)
{
first = first->next;
second = second->next;
}
second->next = second->next->next;//直接覆盖
return dummy->next;
}
};
本文介绍了一种高效算法,通过一次遍历实现链表中倒数第N个节点的删除操作。该算法使用双指针技巧,先让第一个指针向前移动N+1个位置,然后两个指针同时移动直到第一个指针到达链表尾部。此时,第二个指针正好指向待删除节点的前一个节点,从而可以直接进行删除操作。
545

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



