【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)。

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