【LeetCode刷題記錄】19. 刪除鏈表的倒數第N個節點

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章