没在本地测试,一次提交直接通过。
ListNode *removeNthFromEnd(ListNode *head, int n) {
if (head == NULL)
return NULL;
if (head->next == NULL && n == 1)
{
delete head;
return NULL;
}
ListNode *p,*q;
p = q = head;
while(n > 0 && q != NULL)//search the position of q,
{
q = q->next;
n--;
}
if (n > 0)
return head;
if (q == NULL)//delete head
{
ListNode *s = head;
head = head->next;
delete s;
}
else
{
while(q->next)
{
p = p->next;
q = q->next;
}
ListNode *s = p->next;
if (s!=NULL)
{
p->next = s->next;
delete s;
}
}
return head;
}

本文介绍了一种高效算法,用于删除单链表中倒数第N个节点。该方法仅使用两个指针便能一次性遍历完成操作,避免了多次遍历带来的性能损耗。适用于计算机科学领域的数据结构与算法优化。

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



