移除列表倒数低 N 个结点
Apr 02, 2022这题很容易会想到遍历链表获得长度,减去 N 得到应移除结点的前结点索引,然后在遍历。但是这样不够高效,需要进行两次遍历。
可以遍历链表时,设定一个指针 P 指向当前遍历结点的前 N 个,当结点到达最后,自然 P 所指向的就是倒数第 N 个结点。
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* p = NULL;
ListNode* cur = head;
int curN = 0;
while (cur != NULL)
{
++curN;
if (curN >= n + 1)
{
p = p == NULL ? head : p -> next;
}
cur = cur->next;
}
if (p != NULL)
{
p->next = p->next->next;
}
else if (curN >= n)
{
head = head->next;
}
return head;
}
Comments