做题总结 707. 设计链表
做题总结 707. 设计链表
- leetcode中单链表节点的默认定义
- 我的尝试
- 正确运行的代码(java)
leetcode中单链表节点的默认定义
class ListNode {int val;ListNode next;//无参public ListNode() {}//有参:1public ListNode(int val) {this.val = val;}//有参:2public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}
如果不定义构造函数使用默认构造函数的话,在初始化的时候就不能直接给变量赋值。
我的尝试
请注意这段代码是错的,请勿参考
错误分析:
① 题目 “你可以选择使用单链表或者双链表,设计并实现自己的链表。” 是使用力扣官方给的单链表和双链表,然后设计实现自己的链表MyLinkedList 。单链表为 ListNode。
② MyLinkedList 中使用 ListNode类。
③ 添加一个变量 size,记录 MyLinkedList 中节点的个数。
④ 【问题】java中 this 指针可以更改指向吗?
⑤ MyLinkedList myLinkedList; myLinkedList.addAtHead(1); 这样是没法调用的,会报错,《might not have been initialized》
⑥ 下文代码中的 this==null 也是多余的,IDEA上说《Condition ‘this == null’ is always ‘false’》。我分析是因为this是 java虚拟机给每个对象分配的,代表当前对象。而对象一定是需要在堆中new出来的。如果只是MyLinkedList myLinkedList; 其实这个变量只是在栈中定义,堆中并没有对象。
⑦ 虚拟头节点/哑节点/dummy head,是为了方便增删。
⑧ 力扣中定义的class是可以加属性的。
//代码是错的,请勿参考。
class MyLinkedList {int val;MyLinkedList next;public MyLinkedList() {this.val = 0;this.next = null;}public int get(int index) {if(index < 0) return -1;//下标无效//this有可能为空吗?int count=0;MyLinkedList h = this;while(h!=null) {if(count == index) {return h.val;}h = h.next;count++;}return -1;}public void addAtHead(int val) {MyLinkedList newhead = new MyLinkedList();newhead.val = val;newhead.next = this;this = newhead;}public void addAtTail(int val) {MyLinkedList newnode = new MyLinkedList();newnode.val = val;newnode.next = null;if(this == null) {this = newnode;} else {MyLinkedList temp = this;while(temp.next != null) {temp = temp.next;}temp.next = newnode;}}public void addAtIndex(int index, int val) {//链表为空:index再合法也没用//index不合法//index超过链表长度//加在中间//加在末尾if(this == null) return;if(index < 0) return;MyLinkedList newnode = new MyLinkedList();newnode.val = val;newnode.next = null;//哑节点MyLinkedList newh = new MyLinkedList();newh.next = this;//tempMyLinkedList temp = newh;//计数int count=0;while(temp.next!=null) {if(count == index) {newnode.next = temp.next.next;temp.next = newnode;return;}count++;temp = temp.next;}if(index == count) {temp.next = newnode;}return;//index超过链表长度}public void deleteAtIndex(int index) {}
}
正确运行的代码(java)
分析:
① get、addAtIndex、 deleteAtIndex中的 for循环查找 index 用的是同一套逻辑,for循环之后,temp所在的位置是 目标为index节点的前一个。
② addAtHead、addAtTail 可以合并到addAtIndex中。
③ size这个变量很巧妙得同时考虑到了,链表为空和 index大于链表长度的情况。
class MyLinkedList {int size;ListNode head;//注意这里是单链表节点 ListNode//虚拟头节点public MyLinkedList() {this.size = 0;head = new ListNode(0);//注意这里是单链表节点 ListNode}public int get(int index) {if(index < 0 || index >=size) {return -1;}ListNode temp = this.head;for(int i=0; i<index; i++) {temp = temp.next;}return temp.next.val;//这里}public void addAtHead(int val) {addAtIndex(0,val);}public void addAtTail(int val) {addAtIndex(size,val);}public void addAtIndex(int index, int val) {if(index < 0 || index > size) {return;}//size避免了链表为空,index大于链表长度的情况ListNode node = new ListNode(val);ListNode temp = this.head;for(int i=0; i<index; i++) {temp = temp.next;}node.next = temp.next;temp.next = node;size++;}public void deleteAtIndex(int index) {if(index < 0 || index >= size) {return;}ListNode temp = this.head;for(int i=0; i<index; i++) {temp = temp.next;}temp.next = temp.next.next;size--;//这里}
}class ListNode {int val;ListNode next;//无参public ListNode() {}//有参:1public ListNode(int val) {this.val = val;}//有参:2public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

相关文章:
做题总结 707. 设计链表
做题总结 707. 设计链表 leetcode中单链表节点的默认定义我的尝试正确运行的代码(java) leetcode中单链表节点的默认定义 class ListNode {int val;ListNode next;//无参public ListNode() {}//有参:1public ListNode(int val) {this.val val;}//有参:…...
django实现--视图的使用
在 Django 中,视图是处理 Web 请求并返回 Web 响应的组件。Django 提供了两种主要类型的视图:基于函数的视图和基于类的视图。下面详细解释基于类的视图的实现方法、使用以及与基于函数的视图的异同。 基于类的视图的实现方法 继承 Django 的类视图基类…...
【dirty cred】fileManager [XXX]
前言 这应该不是个题,应该是佬为了测试 dirty cred 利用写的。但是环境有问题,测试最多只能向文件中写入 1024MB 的数据。所以竞争窗口太短了,但是似乎替换 credential obj 又是成功的了。感觉是环境的问题。 漏洞分析与利用 一次任意释放…...
线程按顺序循环执行
不瞒大家说,这是之前参加阿里一面的手写编程题,平时不刷题,这个当时花的时间比较多,虽然最后用了很喽比方法写出来了,自己还是很不满意。下面实话也是看了其他大佬的思路,今天重新练了下。 假设有3个线程,依次打印A、B、C,按顺序循环打印100次。 这个其实是线程通信,…...
C# 使用异步委托获取线程返回值
写在前面 异步委托主要用于解决 ThreadPool.QueueUserWorkItem 没有提供获取线程执行完成后的返回值问题。异步委托只能在.Net Framework 框架下使用,.Net Core中会报平台错误,而且使用Task.Result来获取返回值,可以达成同样的目的ÿ…...
生鲜蔬果展示预约小程序作用是什么
线下生鲜蔬果店非常多,对商家来说主要以同城生意为主,而在互联网电商的发展下,更多的商家会选择搭建私域商城进行多渠道的销售卖货和拓展,当然除了直接卖货外,还有产品纯展示或预约订购等需求。 但无论哪种模式&#…...
【C++】类与对象(下)
本文目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&am…...
一文了解 Go 方法
前言 在前面的 一文熟悉 Go 函数 文章中,介绍了 Go 函数的声明,函数的几种形式如匿名函数、闭包、基于函数的自定义类型和函数参数详解等,而本文将对方法进行介绍,方法的本质就是函数,介绍方法的同时也会顺带对比其与函…...
【Docker】vxlan的原理与实验
VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。 VXLAN介绍 VXLAN是在底层…...
广度(宽度)优先搜素——层层递进
分析算法及题目 完整代码实现 广度优先搜索(Breadth-First Search,BFS)是一种图和树的遍历算法,与深度优先搜索相对应。BFS从起始节点开始,首先访问起始节点,然后逐层地访问其邻居节点,直到达到…...
设计模式——建造者模式(创建型)
引言 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 问题 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。 这些初始化代码…...
getopt --- C 风格的命令行选项解析器
源代码: Lib/getopt.py 备注 getopt 模块是一个命令行选项解析器,其 API 设计会让 C getopt() 函数的用户感到熟悉。 不熟悉 C getopt() 函数或者希望写更少代码并获得更完善帮助和错误消息的用户应当考虑改用 argparse 模块。 此模块可协助脚本解析 sys.argv 中的…...
Mysql大数据量删除
Mysql大数据量删除 在一些操作中,可能需要清理一下积压的数据,如果数据量小的话自然没有问题,但是如果是个大数据量的问题,那么就该考虑一个合适的办法了。 在清理大数据量的时候需要考虑是清理部分数据还是清理所有数据…...
【python中类的介绍】
python中类的介绍 在Python中,定义类需要使用关键字 class类名通常使用大写字母开头,举例: class MyClass:pass解释:定义了一个MyClass的空类。 1、python中类定义 “”" 类中可以定义属性和方法。 1、属性是类的数据成…...
PO模式在selenium自动化测试框架有什么好处
PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式,使用这种模式后,可以有效的提升代码的复用能力,并且让自动化测试代码维护起来更加方便。 PO模式的全称叫page object model(POM),有时候叫做 p…...
智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于斑马算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑马算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…...
deepface:实现人脸的识别和分析
deepface介绍 deepface能够实现的功能 人脸检测:deepface 可以在图像中检测出人脸的位置,为后续的人脸识别任务提供基础。 人脸对齐:为了提高识别准确性,deepface 会将检测到的人脸进行对齐操作,消除姿态、光照和表…...
Pytorch当中nn.Identity()层的作用
在深度学习中,nn.Identity() 是 PyTorch 中的一个层(layer)。它实际上是一个恒等映射,不对输入进行任何变换或操作,只是简单地将输入返回作为输出。 通常在神经网络中,各种层(比如全连接层、卷…...
linux课程第二课------命令的简单的介绍2
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
【PTA刷题】 求子串(代码+详解)
【PTA刷题】 求子串(代码详解) 题目 请编写函数,求子串。 函数原型 char* StrMid(char *dst, const char *src, int idx, int len);说明:函数取源串 src 下标 idx 处开始的 len 个字符,保存到目的串 dst 中,函数值为 dst。若 len…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
