【LeetCode热题100】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

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

四.解题思路

解法1:两次扫描
解法2:快慢指针
在这里插入图片描述

五.代码实现

解1

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* myhead = new ListNode(-1);
        myhead->next = head;
        ListNode* p = myhead;
        int len = 0;
        while(head)
        {
            len++;
            head = head->next;
        }
        int nownode = 0;
        while(nownode != len - n)
        {
            p = p->next;
            nownode++;
        }
        p->next = p->next->next;
        return myhead->next;
    }
};

解2

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* myhead = new ListNode(-1);
        myhead->next = head;
        ListNode* slow = myhead;
        ListNode* quick = slow;
        while(n>0)
        {
            quick = quick->next;  
            n--;
        }
        while(quick->next)
        {
            quick = quick->next;
            slow = slow->next;
        }
        slow->next = slow->next->next;
        return myhead->next;
    }
};

六.题目总结

链表的问题多想想快慢指针

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 13:36:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 13:36:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 13:36:05       82 阅读
  4. Python语言-面向对象

    2024-03-15 13:36:05       91 阅读

热门阅读

  1. EXEC sp_executesql 与 EXEC 的区别、使用场景和例子

    2024-03-15 13:36:05       44 阅读
  2. Android垃圾回收机制

    2024-03-15 13:36:05       41 阅读
  3. Unity3D MMORPG角色的UI血条管理详解

    2024-03-15 13:36:05       45 阅读
  4. linux下如何hook第三方播放器的视频数据?

    2024-03-15 13:36:05       37 阅读
  5. Ubuntu 根分区扩容

    2024-03-15 13:36:05       40 阅读
  6. RockChip Android13 修改U盘挂载目录

    2024-03-15 13:36:05       42 阅读
  7. 【笔记】学习Android.mk(四)

    2024-03-15 13:36:05       39 阅读
  8. 每天一个数据分析题(二百零六)

    2024-03-15 13:36:05       39 阅读
  9. jffs2文件系统挂载到Ubuntu,制作新的jffs2文件系统

    2024-03-15 13:36:05       39 阅读
  10. PyTorch学习笔记之基础函数篇(八)

    2024-03-15 13:36:05       31 阅读
  11. 实现两栏布局

    2024-03-15 13:36:05       35 阅读