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

news2024/9/22 13:29:40

1. 题目大意

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?

2. 思路分析

t题目示意图

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

我们可以先遍历一遍链表求出链表的长度,再遍历时遇到倒数第n+1个,可以直接删除第n个。

接下来是进阶,上面的方法需要遍历两遍链表,如果遍历一次那?答:使用双指针,A指针在原地,另一个B指针距离上一个指针N个节点,当B指针为空的时,A指针恰好指向第N个节点。当然为了方便删除的操作,可以在列表前面加一个头节点,A从头节点开始计算,这样当B节点为空的时候,A恰好指向倒数第N个节点的前一个节点。

3. 代码示例

Java版本

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode temp = head;
        int size = 0;
        while(temp!=null){
            temp = temp.next;
            size++;
        }
        if(size ==1){
            return null;
        }
        ListNode dummy = new ListNode(0, head);
        ListNode cur = dummy;
        for(int i=1; i<size-n+1; i++){
            cur = cur.next;
        }
        cur.next = cur.next.next;
        return dummy.next;
    }
}

Python版本

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        res = ListNode(0)
        cur = res
        # 保存进制记录
        carry = 0
        while l1 is not None or l2 is not None or carry:
            x = 0 if l1 is None else l1.val
            y = 0 if l2 is None else l2.val
            sum = x+y+carry

            carry = sum // 10
            sum = sum % 10
            cur.next = ListNode(sum)
            cur = cur.next

            if l1 is not None:
                l1 = l1.next
            if l2 is not None:
                l2 = l2.next
        return res.next

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Data Localization Software Architecture - SAAS Localization CyberWin Future

一、Future Window Industry Application Cross-platform Architecture The cross-platform architecture of Future Window adopts Hybird (hybrid mode mobile application), which is a mobile application development model that combines the characteristics of native …

golang学习笔记——grom连接mysql

GORM 指南 The fantastic ORM library for Golang aims to be developer friendly. Golang的ORM库旨在对开发人员友好。 特性 全功能 ORM关联 (Has One&#xff0c;Has Many&#xff0c;Belongs To&#xff0c;Many To Many&#xff0c;多态&#xff0c;单表继承)Create&…

【Redis】渐进式遍历和数据库管理

渐进式遍历和数据库管理 渐进式遍历scan 数据库管理切换数据库清除数据库 渐进式遍历 Redis 使⽤ scan 命令进⾏渐进式遍历键&#xff0c;进⽽解决直接使⽤ keys 获取键时可能出现的阻塞问题。每次 scan 命令的时间复杂度是 O(1)&#xff0c;但是要完整地完成所有键的遍历&…

数学建模笔记(三):拟合算法

前面介绍的插值方法&#xff0c;我们可以发现他的特点在于最终得到的曲线一定要经过已经给出的样本点的&#xff0c;而这次要介绍的拟合方法的区别在于&#xff0c;拟合不要求曲线一定要经过所有的样本点&#xff0c;只要这个曲线与样本点之间的误差足够小&#xff0c;距离足够…

unity AssetBundle 使用_什么是AssetBundle_导入必要的插件_创建AssetBundles_AB包资源下载_大文件下载

一、什么是AssetBundle&#xff1f; 定义AssetBundle。 AssetBundle 是一个存档文件&#xff0c;包含可在运行时由 Unity 加载的特定于平台的非代码资源&#xff08;比如模型、纹理、预制件、音频剪辑甚至整个场景&#xff09;。AssetBundle 可以表示彼此之间的依赖关系&…

PD取电快充协议方案

PD快充协议是通过调整电压和电流来提供不同的充电功率。它采用了一种基于USB-C端口的通信协议&#xff0c;实现了充电器于设备之间的信息交换。在充电过程中设备会向充电器发出请求&#xff0c;要求提供不同的电压和电流&#xff0c;充电器接收到请求后&#xff0c;会根据设备的…

数据本地化软件架构-SAAS本地化未来之窗行业应用跨平台架构

一、未来之窗行业应用跨平台架构 未来之窗跨平台架构采用Hybird&#xff08;混合模式移动应用&#xff09;是一种结合了原生应用&#xff08;Native App&#xff09;和网页应用&#xff08;Web App&#xff09;特点的移动应用开发模式。 二、特点 2.1. 开发成本相对较低 - 与…

C++码表之Unicode

今日诗词&#xff1a; 折花逢驿使&#xff0c;寄与陇头人。 江南无所有&#xff0c;聊赠一枝春。 ——《赠范晔诗》【南北朝】陆凯 引言&#xff1a; 上一期我们说到了ASCII码表&#xff0c;这是一种现如今不是那么通用的机制&#xff0c;随着计算机的普及&#xff0c;越来越…

电脑ip地址为什么会自己变更?电脑ip怎么改

在当今这个高度依赖互联网的时代&#xff0c;IP地址作为网络设备的身份标识&#xff0c;其稳定性和可管理性对于网络通信的顺畅至关重要。然而&#xff0c;许多用户可能会遇到电脑IP地址自动变更的情况&#xff0c;这不仅可能影响到网络连接的稳定性&#xff0c;还可能给远程访…

怎么使用win10录屏快捷键 ?分享三款录屏工具

录屏软件在我们日常生活中越来越常见&#xff0c;无论是做教程、记录游戏精彩瞬间还是进行远程教学&#xff0c;一个好的录屏软件都能让我们的生活变得更加便捷。不少人也会选怎win10自带的录屏&#xff0c;使用WIN10 录屏快捷键【winG】&#xff0c;就可以唤出录屏工具&#x…

【Node】【1】node和nvm安装

安装nvm、node、npm 安装node 18 &#xff0c;最简单的办法是使用nvm&#xff0c;就不用手动安装了&#xff0c;那么就得先安装nvm。 NVM 是Node Version Manager&#xff0c;用于管理 Node.js 版本。你设备上的不同项目可能使用不同版本的 Node.js。通过 nvm&#xff0c;用户…

Redis | 非关系型数据库Redis的初步认识

本节内容相对理论&#xff0c;着重看基础通用命令这一节 Redis 非关 kv型{字典} 概念应用ubuntu安装配置 windows添加密码 可能问题【ubuntu】远程连接 基础通用命令 ⭐ 概念 特点&#xff1a; 1、开源的&#xff0c;使用C编写&#xff0c;基于内存且支持持久化 2、没有表 支持…

ssrf例题分析

我们第一步先在ubuntu中解压web-ssrfme.zip&#xff0c;更新镜像后重启容器。 我们可以看到代码中成功拉取到ssrfme镜像 ig(preg_match(/file\:\/\/&#xff5c;dict\:\/\/.&#xff5c;\.\.\/&#xff5c;127.0.0.1&#xff5c;localhost/is,$url,$match)) 使用端口访问文件&…

【Linux系列】SH 与 BASH 的区别:深入解析与使用案例

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Leetcode JAVA刷刷站(93)复原IP地址

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用回溯算法。回溯算法在这里非常适用&#xff0c;因为我们需要尝试在字符串中的不同位置插入点&#xff08;.&#xff09;来分割出可能的IP地址段&#xff0c;并且需要验证每个段是否满足条件&#xff08;即…

如何使用ssm实现铁岭河医院医患管理系统+vue

TOC ssm077铁岭河医院医患管理系统vue 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文…

从web.xml动态读取sunspringmvc.xml文件

文章目录 1.问题分析1.SunWebApplicationContext.java 中sunspringmvc.xml是写死的2.但是web.xml已经配置了init-param&#xff0c;所以应该是可以读取的 2.具体实现1.SunDispatcherServlet.java 得到ServletConfig传递给Spring容器完成初始化2.SunWebApplicationContext.java …

C_03 函数学习

函数 优点&#xff1a; 降低代码耦合度降低代码冗余度提高代码复用率提高代码可读性 思想&#xff1a; 封装【包装】 声明&#xff1a; 语法&#xff1a; extern 函数名(形参列表)&#xff1b;// 注意&#xff1a;此时 形参列表中变量名可以忽略不写&#xff1b;定义&#xff1…

2024.8.26

一、对于第三模态加入对于模型性能的影响 yes/no other num 尝试通过 1、删去第一次反向传播时第三模态的梯度更新 &#xff08;1&#xff09;第三次反向传播会再进行一次更新 &#xff08;2&#xff09;阻止模型频繁的学习训练样本 2、取消第三模态共享头部更新时的权重修正&…

Vue.js实战教程:如何一步步构建HSK在线学习平台

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…