【C/C++】删除链表的倒数第 N 个结点(leetcode T19)

news/2025/2/27 7:49:19

考点预览:

  • 双指针法:通过维护两个指针来一次遍历链表,避免了多次遍历链表的低效方法。

  • 边界条件:要特别处理删除头结点的情况。

题目描述:

给你一个链表,删除链表的倒数第 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

详细解析:

struct ListNode {
     int val;
     struct ListNode *next;
 };
struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
    struct ListNode *p1, *p2;
    p1 = head;
    p2 = head;
    int i;
    for (i = 0; i < n;i++)
    {
        p1 = p1->next;
    }
    if(p1==NULL)
    {
        return head->next;
    }
    while(p1->next!=NULL)
    {
        p1 = p1->next;
        p2 = p2->next;
    }
    p2->next = p2->next->next;
    return head;
}

题目解析

给定一个链表,删除链表的倒数第 n 个节点,并返回链表的头结点。我们可以通过双指针的方法来高效解决这个问题,避免对链表进行多次遍历。

思路分析

  1. 初始化两个指针:我们使用两个指针 p1p2,并将它们都指向链表的头部。

  2. p1 先走 n:首先,我们让 p1 指针先走 n 步,这样 p1p2 之间就有了 n 个节点的间隔。

  3. 同时移动两个指针:接着,我们同时移动 p1p2,直到 p1 到达链表的末尾。此时,p2 就会指向倒数第 n 个节点的前一个节点。

  4. 删除节点:由于 p2 指向的是倒数第 n 个节点的前一个节点,我们可以通过 p2->next = p2->next->next 来删除目标节点。

  5. 特殊情况:如果 p1 在走 n 步后就已经为 NULL,说明要删除的是头结点。此时直接返回 head->next 即可。

时间复杂度:此方法的时间复杂度为 O(L),其中 L链表的长度。因为我们只遍历了一遍链表


http://www.niftyadmin.cn/n/5869750.html

相关文章

AXI协议详解及FPGA仿真

AXI协议详解及FPGA仿真 1 摘要 AMBA AXI 协议是以高性能&#xff0c;高频系统设计为目标&#xff0c;提供了很多适合高速亚微型系统互连的特征。为相邻存储器连续进行数据传输提供的一种高频率&#xff0c;高带宽&#xff0c;低延迟的总线协议&#xff0c;是一种突发传输协议…

Java爬虫中如何处理JavaScript渲染的页面?

在Java爬虫中处理JavaScript渲染的页面是一个常见的挑战&#xff0c;因为传统的HTTP请求库&#xff08;如HttpClient&#xff09;无法执行JavaScript代码。为了应对这一问题&#xff0c;可以采用以下几种方法&#xff1a; 1. 使用无头浏览器 无头浏览器是一种没有图形界面的浏…

设计模式-(状态模式,策略模式,代理模式,责任链模式)

状态模式 概念&#xff1a; 用于管理一个对象在不同状态下的行为变化。它允许对象在内部状态改变时改变其行为&#xff0c;从而让对象看起来像是改变了其类。状态模式的核心思想是将状态封装到独立的类中&#xff0c;每个状态类都定义了在该状态下对象的行为 状态模式主要涉…

图像处理之图像边缘检测算法

目录 1 图像边缘检测算法简介 2 Sobel边缘检测 3 经典的Canny边缘检测算法 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 图像边缘检测算法简介 图像边缘检测是计算机视觉和图像处理中的基本问题&#xff0c;主要目的是提取图像中明暗变化明显的边缘细节…

微服务架构与传统的单体架构有什么区别?微服务架构(Spring Cloud + Maven)强在哪?

微服务架构与传统的单体架构&#xff08;Spring Boot Maven 项目&#xff09;在设计和实现上有显著差异&#xff0c;主要体现在系统拆分方式、部署模式、技术栈选择、维护成本等方面。以下是具体对比&#xff1a; 1. 架构设计 维度单体架构微服务架构系统拆分所有功能模块集…

千峰React:案例一

做这个案例捏 因为需要用到样式&#xff0c;所以创建一个样式文件&#xff1a; //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件&#xff0c;修改main文件&#xff1a;导入Todos&#xff0c;写入Todos组件 import { StrictMode } from react …

【前端基础】Day 2 CSS层叠样式表

目录 1.CSS简历 2.CSS 基础选择器 2.1标签选择器 2.2类选择器 2.3 id选择器 2.4通配符选择器 2.5总结 3.CSS字体属性 字体属性总结 4.CSS文本属性 4.1颜色 4.2对齐文本 4.3装饰文本 4.4文本缩进 4.5行间距 4.6文本属性总结 5.CSS的引入方式 5.1内部样式表 …

36. Spring Boot 2.1.3.RELEASE 中实现监控信息可视化并添加邮件报警功能

1. 创建 Spring Boot Admin Server 项目 1.1 添加依赖 在 pom.xml 中添加 Spring Boot Admin Server 和邮件相关依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-w…