LeetCode 的 C++ 实现(十)删除链表的倒数第N个节点

编程入门 行业动态 更新时间:2024-10-23 21:39:53

LeetCode 的 C++ 实现(十)删除链表的倒数第N个<a href=https://www.elefans.com/category/jswz/34/1771452.html style=节点"/>

LeetCode 的 C++ 实现(十)删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:

给定的 n 保证是有效的。

暴力解法

class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyNode = new ListNode(0);dummyNode->next = head;ListNode* pWork = head;int size = 0;while(pWork != nullptr){pWork = pWork->next;size++;}int target = size + 1 -n;pWork = dummyNode;for(int times = 1; times < target ; times++){pWork = pWork->next;}pWork->next = pWork->next->next;return dummyNode->next;}
};

双指针法

  1. 设置虚拟节点 dummyHead 指向 head
  2. 设定双指针 p 和 q,初始都指向虚拟节点 dummyHead
  3. 移动 q,直到 p 与q 之间相隔的元素个数为 n
  4. 同时移动 p 与 q,直到 q 指向的为 NULL
  5. 将 p 的下一个节点指向下下个节点
    ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* first = dummy;ListNode* second = dummy;// Advances first pointer so that the gap between first and second is n nodes apartfor (int i = 1; i <= n + 1; i++) {first = first->next;}// Move first to the end, maintaining the gapwhile (first != nullptr) {first = first->next;second = second->next;}second->next = second->next->next;return dummy->next;

更多推荐

LeetCode 的 C++ 实现(十)删除链表的倒数第N个节点

本文发布于:2024-02-12 16:01:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1688459.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:节点   倒数   链表   LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!