iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(19.移除链表倒数第N个节点)
  • 923
分享到

C++实现LeetCode(19.移除链表倒数第N个节点)

2024-04-02 19:04:59 923人浏览 独家记忆
摘要

[LeetCode] 19. Remove Nth node From End of List 移除链表倒数第N个节点 Given a linked list, remove the

[LeetCode] 19. Remove Nth node From End of List 移除链表倒数第N个节点

Given a linked list, remove the nth node from the end of list and return its head.

For example,

Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:
Given n will always be valid.
Try to do this in one pass.

这道题让我们移除链表倒数第N个节点,限定n一定是有效的,即n不会大于链表中的元素总数。还有题目要求一次遍历解决问题,那么就得想些比较巧妙的方法了。比如首先要考虑的时,如何找到倒数第N个节点,由于只允许一次遍历,所以不能用一次完整的遍历来统计链表中元素的个数,而是遍历到对应位置就应该移除了。那么就需要用两个指针来帮助解题,pre 和 cur 指针。首先 cur 指针先向前走N步,如果此时 cur 指向空,说明N为链表的长度,则需要移除的为首元素,那么此时返回 head->next 即可,如果 cur 存在,再继续往下走,此时 pre 指针也跟着走,直到 cur 为最后一个元素时停止,此时 pre 指向要移除元素的前一个元素,再修改指针跳过需要移除的元素即可,参见代码如下:

方式一:


class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if (!head->next) return NULL;
        ListNode *pre = head, *cur = head;
        for (int i = 0; i < n; ++i) cur = cur->next;
        if (!cur) return head->next;
        while (cur->next) {
            cur = cur->next;
            pre = pre->next;
        }
        pre->next = pre->next->next;
        return head;
    }
};

方式二:


class Solution {
public:
    int getLength(ListNode* head) {
        int length = 0;
        while (head) {
            ++length;
            head = head->next;
        }
        return length;
    }

    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* dummy = new ListNode(0, head);
        int length = getLength(head);
        ListNode* cur = dummy;
        for (int i = 1; i < length - n + 1; ++i) {
            cur = cur->next;
        }
        cur->next = cur->next->next;
        ListNode* ans = dummy->next;
        delete dummy;
        return ans;
    }
};

到此这篇关于c++实现LeetCode(19.移除链表倒数第N个节点)的文章就介绍到这了,更多相关C++实现移除链表倒数第N个节点内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(19.移除链表倒数第N个节点)

本文链接: https://www.lsjlt.com/news/130371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现LeetCode(19.移除链表倒数第N个节点)
    [LeetCode] 19. Remove Nth Node From End of List 移除链表倒数第N个节点 Given a linked list, remove the...
    99+
    2024-04-02
  • C++实现移除链表倒数第N个节点
    这篇文章主要讲解了“C++实现移除链表倒数第N个节点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现移除链表倒数第N个节点”吧! Remove Nth Node From ...
    99+
    2023-06-20
  • List怎么删除链表的倒数第N个节点
    本篇内容介绍了“List怎么删除链表的倒数第N个节点”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:删除链表的倒数第N个节点题目给定一个...
    99+
    2023-06-19
  • LeetCode题解之如何删除链表倒数第n个结点
    这篇文章主要讲解了“LeetCode题解之如何删除链表倒数第n个结点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LeetCode题解之如何删除链表倒数第n...
    99+
    2024-04-02
  • C++进阶练习删除链表的倒数第N个结点详解
    目录1.链接2.题目描述3.解题思路4.题解1.链接 19. 删除链表的倒数第 N 个结点. 2.题目描述 3.解题思路 方法一 1.在对链表进行操作时,一种常用的技巧是添加一个哑...
    99+
    2024-04-02
  • C++实现LeetCode(237.删除链表的节点)
    [LeetCode] 237.Delete Node in a Linked List 删除链表的节点 Write a function to delete a node (exce...
    99+
    2024-04-02
  • 怎么找到链表的倒数第n个结点
    本篇内容主要讲解“怎么找到链表的倒数第n个结点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么找到链表的倒数第n个结点”吧!什么意思呢我们以下面这个链表为例:...
    99+
    2024-04-02
  • C++实现LeetCode(203.移除链表元素)
    [LeetCode] 203.Remove Linked List Elements 移除链表元素 Remove all elements from a linked list of...
    99+
    2024-04-02
  • 利用Java怎么将链表输出到倒数第k个节点
    利用Java怎么将链表输出到倒数第k个节点?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。问题描述输入一个链表,输出该链表中倒数第k个结点。结点定义如下:publ...
    99+
    2023-05-31
    java ava
  • C++实现LeetCode(160.求两个链表的交点)
    [LeetCode] 160.Intersection of Two Linked Lists 求两个链表的交点 Write a program to find the node a...
    99+
    2024-04-02
  • C++实现LeetCode(83.移除有序链表中的重复项)
    [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项 Given a sorted linked list, d...
    99+
    2024-04-02
  • C++实现LeetCode(82.移除有序链表中的重复项之二)
    [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项之二 Given a sorted linked li...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作