用两个指针,一前一后。在前的指针先走n步,然后两个指针再一起前进,最后要删除的指针就是后指针的next
class Solution
{
public:
ListNode *removeNthFromEnd(ListNode *head, int n)
{
ListNode dummy(-1);
dummy.next = head;
ListNode *p = &dummy, *q = &dummy;
for (int i = 0; i < n; i++)
q = q->next;
while (q->next != nullptr)
{
p = p->next;
q = q->next;
}
ListNode *temp = p->next;
p->next = p->next->next;
delete temp;
return dummy.next;
}
};
本文介绍了一种使用双指针技术解决链表中删除倒数第N个节点的问题的方法。通过设置一个虚拟头节点,利用前后两个指针的相对位置关系,巧妙地实现了在遍历过程中直接找到并删除目标节点的功能,避免了额外的空间开销。
746

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



