• 19. 删除链表的倒数第 N 个结点


    19. 删除链表的倒数第 N 个结点

    题目链接:19. 删除链表的倒数第 N 个结点(中等)

    题目描述

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

    进阶:你能尝试使用一趟扫描实现吗?

    示例 1:

    输入:head = [1,2,3,4,5], n = 2
    输出:[1,2,3,5]

    示例 2:

    输入:head = [1], n = 1
    输出:[]

    示例 3:

    输入:head = [1,2], n = 1
    输出:[1]

    提示:

    • 链表中结点的数目为 sz

    • 1 <= sz <= 30

    • 0 <= Node.val <= 100

    • 1 <= n <= sz

    题解

    思路:利用快慢指针,首先使两指针之间的距离相差 n,然后再同时移动两指针(两指针之间的距离一直保持为 n),当快指针所指节点的 next 指向"NULL"时,停止移动指针,此时慢指针所指节点的 next 指向的就是需要删除的节点。

    代码(C++版本)

    ListNode* removeNthFromEnd(ListNode* head, int n) {
        //添加一个虚拟头节点
        ListNode* headNode = new ListNode(0);
        headNode->next = head;
        head = headNode;
    ​
        ListNode* fp = head;
        ListNode* sp = head;
        for (int i = 0; i < n && fp->next != NULL; i++) {
            fp = fp->next;
        }
        while (fp->next != NULL) {
            sp = sp->next;
            fp = fp->next;
        }
    ​
        ListNode* tp = sp->next;
        sp->next = tp->next;
        delete tp;
    ​
        //删除虚拟头节点
        head = headNode->next;
        delete headNode;
    ​
        return head;
    }

    分析

    • 时间复杂度:O(N)

    • 空间复杂度:O(1)

  • 相关阅读:
    Integer的十进制转二,八,十六进制
    Java内存模型
    python gui --tkinter
    图论-最短路径
    Java NIO
    浏览器关闭后,Session就销毁了吗?
    mysql查询最新一条数据
    MySQL 查看命令执行时间
    MySQL 删除devices表中id最大的一行
    MySQL中的联表查询与子查询
  • 原文地址:https://www.cnblogs.com/wltree/p/15515939.html
Copyright © 2020-2023  润新知