题目描述:
题解:
问题的关键是如何确定倒数第n个节点的位置,先看代码:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *h = new ListNode(0);
h->next = head;
ListNode *p = h;
ListNode *k = h;
if (head->next == NULL) return{};
for (int i = 0; i <= n; i++)
{
k = k->next;
}
while (k)
{
p = p->next;
k = k->next;
}
p->next = p->next->next;
return h->next;
}
设链表长度为m,先定义一个“工具人”k,让它指向链表倒数第m-n个元素;接下来让k逐次指到链表末尾,同时,p向后索引;那么,当k指到链表末尾时,p就指到了倒数第m-(m-n)=n个元素。
复杂度分析:显然,时间复杂度为O(N),N为链表长度;空间复杂度为O(1)。