題目描述:
題解:
問題的關鍵是如何確定倒數第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)。