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

原创文章 23 获赞 0 访问量 975

猜你喜欢

转载自blog.csdn.net/weixin_42192493/article/details/105266505
今日推荐