当前位置: 首页 > news >正文

代码随想录-链表 | 707设计链表

代码随想录-数组 | 707设计链表

  • LeetCode 707-设计链表
    • 解题思路
    • 代码
    • 复杂度
    • 难点
    • 总结

LeetCode 707-设计链表

题目链接

题目描述

你可以选择使用单链表或者双链表,设计并实现自己的链表。

单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。

如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。

解题思路

判断

按照链表的定义书写即可。注意各函数的书写,涉及index时要先判别,

  • 索引:index 是否在 [0,this.length) 之间
  • 插入:index 是否在[0,this.length] 之间

代码

单链表

class MyLinkedList {public static class Node {int val;Node next;public Node(int val) {this.val = val;this.next = null;}}private Node head;private int length;public MyLinkedList() {this.length = 0;this.head = new Node(0);}public int get(int index) {if (index < 0 || index >= this.length) {return -1;}Node currentNode = this.head;for (int i=0; i<= index; i++) {currentNode = currentNode.next;}return currentNode.val;}public void addAtHead(int val) {addAtIndex(0,val);}public void addAtTail(int val) {addAtIndex(this.length,val);}public void addAtIndex(int index, int val) {if (index > this.length) {return;}Node preNode = this.head;for(int i = 0; i < index; i++) {preNode = preNode.next;}Node newNode = new Node(val);newNode.next = preNode.next;preNode.next = newNode;this.length++;}public void deleteAtIndex(int index) {if (index < 0 || index >= this.length){return;}Node preNode = this.head;for (int i = 0; i < index; i++) {preNode = preNode.next;}preNode.next = preNode.next.next;this.length--;}
}

复杂度

  • 时间复杂度
    涉及 index 的相关操作为 O(index), 其余为 O(1)
  • 空间复杂度
    O(n)

难点

  • 定义链表:要注意初始化链表的长度和头节点。
public MyLinkedList() {this.length = 0;this.head = new Node(0);
}

总结

还是要多熟悉熟悉。

http://www.lryc.cn/news/340993.html

相关文章:

  • AIGC算法1:Layer normalization
  • 【C语言】——字符串函数的使用与模拟实现(下)
  • mac安装nvm详细教程
  • 上线流程及操作
  • MobX入门指南:快速上手状态管理库
  • 技术洞察:Selenium WebDriver中Chrome, Edge, 和IE配置的关键区别
  • 使用自定义OCR提升UIE-X检测效果:结合PaddleOCR和UIE模型进行文档信息提取
  • 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
  • .net反射(Reflection)
  • P1278 单词游戏 简单搜索+玄学优化
  • 软考 - 系统架构设计师 - 数据架构真题
  • Ubuntu22.04下opencv4.9.0环境的搭建
  • Flask如何在后端实时处理视频帧在前端展示
  • 04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析
  • 论文笔记:SmartPlay : A Benchmark for LLMs as Intelligent Agents
  • 搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统
  • 线程和进程的区别(面试)
  • 抓取电商产品数据的方法|电商平台商品详情数据|批量上架|商品搬家|电商封装API数据采集接口更高效安全的数据采集
  • 关联规则Apriori算法
  • 书生·浦语大模型全链路开源体系-第4课
  • HTML优化SEO
  • RabbitMQ-交换机
  • mapreduce中的MapTask工作机制(Hadoop)
  • 景区文旅剧本杀小程序亲子公园寻宝闯关系统开发搭建
  • 性能优化---webpack优化
  • YOLOv9改进策略 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
  • 贪心算法-跳跃游戏
  • sql知识总结二
  • VSCode和CMake实现C/C++开发
  • 【机器学习300问】74、如何理解深度学习中L2正则化技术?