LeetCode算法题-Design LinkedList(Java实现)

Java后端面试7天冲刺:从知识点记忆到问题解决能力 如果你正在准备 Java 后端面试,感觉知识点又多又杂,不知道从哪开始,或者刷了很多题但回答时总感觉不成体系,那这篇文章就是为你准备的。我见过太多候选人,基础概念背得滚瓜烂熟,但一遇到“为什么”和“怎么做”的场景题就卡壳。面试官真正想听的,不是你复述八股文,而是你如何用这些知识解决实际问题。这篇文章不会给你一份新的、更长的八股文清单,而是帮你用 7 天时间,把 Java 基础、并发、JVM、MySQL、Spring 这些核心模块,从“知识点记忆”升级为“问题解决能力”。我会告诉你每个模块最高频的考点是什么, 阅读详情

这是悦乐书的第300次更新,第319篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707)。设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:

get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。

addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。

addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。

addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。

deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。


例如:

MyLinkedList linkedList = new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2); //链表变为1-> 2-> 3
linkedList.get(1); //返回2
linkedList.deleteAtIndex(1); //现在链表是1-> 3
linkedList.get(1); //返回3

注意:

  • 所有值都在 [1, 1000] 之内。

  • 操作次数将在 [1, 1000] 之内。

  • 请不要使用内置的 LinkedList 库。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

使用单链表,建立指向表头,表尾的节点,记录表尾节点是用作当在尾部进行add操作时,不需要再遍历一次。

    Node head=null;
    Node tail=null;
    int len=0;
    public MyLinkedList() {
        head=new Node();
        tail=new Node();
    }
    public int get(int index) {
        if (index >= 0 && index < len) {
            Node p = head.next;
            int i = 0;
            while (p != null) {
                if (i == index) {
                    return p.val;
                }
                p = p.getNext();
                i++;
            }
        }
        return -1;
    }
    public void addAtHead(int val) {
        Node node=new Node();
        node.setVal(val);
        if(head.next != null){
            Node p=head.next;
            node.next=p;
            head.next=node;
        }else{
            head.next=node;
            tail=node;
        }
        len++;
    }
    public void addAtTail(int val) {
         Node node=new Node();
         node.setVal(val);
        if(head.next==null){
            head.next=node;
            tail=head.next;
        }else{
            tail.next=node;
            tail=tail.next;
        }
        len++;
    }
    public void addAtIndex(int index, int val) {
        if(index > len){
            return;
        }
        if(index == len){
            addAtTail(val);
            return;
        }
        if(index == 0){
            addAtHead(val);
            return;
        }
        Node node=new Node();
        node.setVal(val);

        Node p = head.next;
        int i = 0;
        while (p!=null && i != index-1) {
            p = p.getNext();
            i++;
        }
        if(p!=null){
            Node q=p.next;
            p.next=node;
            node.next=q;
            len++;
        }
    }
    public void deleteAtIndex(int index) {
        if (index >= 0 && index < len) {
            if(index==0){
                if(head.next!=null){
                    head.next=head.next.next;
                    len--;
                }
                return ;
            }
            Node p = head.next;
            int i = 0;
            while (p!=null && i != index-1) {
                p = p.getNext();
                i++;
            }
            if(p!=null && p.next!=null){
                p.next=p.next.next;
                --len;
                if(i==len-1){
                    tail =p;
                }
            }
        }
    }

03 小结

算法专题目前已日更超过四个月,算法题文章168+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

PCL RANSAC拟合空间圆【2026最新版】 RANSAC三维点云空间3D圆拟合。博客长期更新,本文最新更新时间为:2026年4月13日。代码在PCL1.15.0中测试通过 阅读详情

相关推荐

外部ADC之AD7949——14bit、8通道、250k

在实际项目中,仅靠单片机内部的ADC采样,很有可能达不到实际采样精度,这个时候就需要外接外部ADC芯片进行采样,这些外部ADC一般都是SPI接口或者是并口。单片机通过SPI接口或并口读写芯片内部寄存器,配置参考极性、采样通道、低通滤波器带宽、基准电压源、通道序列器等。本文主要对ADI家的14bit、8通道、250k的ADC7949做一个总结,这款ADC在实际项目中使用,采样精度达到要求,读取时序有点点绕,但是是一款十分常用的ADC芯片。就是价格不太友好哈哈,一块芯片快60。

cyaya6的博客 6718

leetcode 707设计链表 c语言实现

这道题我用c写的,写过程中出现了好多bug,唉,还是对链表不是很熟,比如在插入结点时,如果是首结点该如何处理。好在最后还能正常写出来了~~~ 题目描述 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中...

紫藤&code的博客 1897

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1583

Design Linked List

Design Linked List Design your implementation of the linked list. You can choose to use the singly linked list or the doubly linked list. A node in a singly linked list should have two attributes: va...

byr_wy的博客 335

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

本文详细介绍了如何通过Copilot插件在Obsidian中免费接入DeepSeek-R1模型,实现智能知识管理。从硅基流动API密钥获取到插件配置,再到高级功能调优和实战应用技巧,手把手教你打造AI驱动的个人知识库。

weixin_33686714的博客 2801

5分钟搞懂知识抽取:如何把非结构化数据变成知识图谱的宝藏?

本文通过一个电商评论分析实战案例,详细解析了如何利用spaCy、Neo4j等工具,将非结构化文本数据转化为结构化知识图谱的完整流程。文章重点阐述了知识抽取的核心步骤,包括命名实体识别、关系抽取以及知识存储与查询,帮助读者快速掌握将数据转化为知识宝藏的关键技术。

weixin_29054245的博客 236

LeetCode(707):设计链表 Design Linked List(Java)

2019.11.5 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 数据结构题,应知应会。 传送门:设计链表 Design your implementation of the linked list. You can choose to use the singly ...

NJU_ChopinXBP的博客 541

GEO芯片数据下载和探针ID转换(保姆级教程)

R语言安装、GEO芯片数据下载、探针ID转换

qq_43138237的博客 3万+

LeetCode-Java-707. Design Linked List

题目 Design your implementation of the linked list. You can choose to use the singly linked list or the doubly linked list. A node in a singly linked list should have two attributes: val and next. val...

咸鱼塘 1069

滚动时域优化方法

滚动时域优化(Receding Horizon Optimization, RHO),也被广泛称为模型预测控制(Model Predictive Control, MPC),是一种用于动态系统优化和控制的。其核心思想是“在每个当前时刻k,控制器只考虑未来一个(称为“预测时域”或“优化时域”,长度N)内的系统行为。(通过测量或估计得到)。(描述状态如何随输入和干扰变化)。(如果有,可能基于历史数据或假设)。在这个有限的未来时域[k, k+N-1]上,求解一个。这个优化问题的目标是找到一个。

m0_69522810的博客 2301

道路场景分割:车道线、可行驶区域与路沿检测

道路场景分割:车道线、可行驶区域与路沿检测​ ,人工智能,计算机视觉,大模型,AI,文章围绕道路场景分割展开,涵盖车道线、可行驶区域与路沿检测。介绍了基本概念、重要性,各部分检测的类型、方法、难点及解决思路,还涉及技术融合、数据集、评价指标、发展趋势、应用案例、代码示例、不同天气处理、实际问题与方案、实现流程、相关技术工具、教育研究应用、产业前景、伦理安全问题及学习资源等,全面阐述了道路场景分割的多方面内容,为相关学习和研究提供了丰富信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

java算法题链表_LeetCode算法题-Design LinkedList(Java实现)

这是悦乐书的第300次更新,第319篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707)。设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都...

weixin_36335903的博客 144

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode 707. Design Linked List (设计链表)

题目标签:Linked List   题目让我们自己设计一个 linked list,可以是单向和双向的。这里选的是单向,题目并不是很难,但要考虑到所有的情况,具体看code。 Java Solution: Runtime: 56ms, faster than 21.21% Memory Usage: 45.2MB,less than88.89% 完成日期:0...

weixin_30823001的博客 204

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LeetCode 705. Design HashSet

我们采用 LinkedList 实现 HashSet 中的桶。对于每个功能 add,remove,contains,我们首先生成桶的散列值,操作相对应的桶。 class MyHashSet { private Bucket[] bucketArray; private int keyRange; /** * Initialize your data structure here. */ public MyHashSet() { keyRange = 769;

qq_31361913的博客 155

[leetcode]706. Design HashMap设计HashMap

Design a HashMapwithout using any built-in hash table libraries. To be specific, your design should include these functions: put(key, value):Insert a (key, value) pair into the HashMap. If the ...

weixin_30399821的博客 104

Java大厂面试全攻略:从JVM调优到分布式系统设计

Java作为企业级开发的主流语言,其技术栈深度与系统设计能力是面试的核心考察点。从JVM内存模型到多线程并发控制,理解底层原理是解决性能问题的关键。分布式系统设计中,CAP理论与一致性算法(如Raft)构成了现代架构的基础。在电商、金融等高并发场景下,Redis缓存和消息队列(如Kafka)的技术选型直接影响系统稳定性。本文通过典型面试题解析,展示如何从字节码层面分析Java并发问题,以及基于GC日志的JVM调优实战。针对分布式场景,详细拆解了如何设计高可用优惠券系统,涵盖分库分表、熔断降级等关键技术方案。

weixin_34327223的博客 304

二叉树层序遍历:从BFS基础到高频变体实战解析

广度优先搜索(BFS)是图与树遍历中的基础算法,其核心思想是逐层探索节点,确保先访问的节点其邻接点也优先被访问。这一特性使其天然适用于需要按层处理或寻找最短路径的场景。在数据结构中,队列凭借其先进先出(FIFO)的特性,成为实现BFS的理想选择。从工程实践角度看,掌握基于队列的BFS模板,不仅能高效解决基础的层序遍历问题,更是应对众多衍生问题的通用钥匙,例如计算层平均值、执行锯齿形遍历或寻找底层最左值。本文以二叉树层序遍历为锚点,深入剖析其队列实现原理、复杂度分析及代码优化技巧,并自然延伸至LeetCode

ithome 480

Java面试攻略:AI时代下从核心八股到系统设计的进阶指南

这次我们来看一个Java程序员在AI冲击下的面试攻略。这不是一个具体的开源项目,而是一套应对当前技术变革和就业市场的系统性方法。核心目标是帮助Java开发者,特别是中高级和后端岗位的求职者,在AI工具普及、面试门槛提升的背景下,高效准备面试,成功拿到Offer并实现涨薪。 最值得关注的是,这套攻略跳出了传统的“死记硬背八股文”模式,它融合了 场景题实战、核心八股文深度理解、Java生态工具链使用 以及 如何利用AI辅助学习和面试 。硬件门槛就是一台能写代码、能跑IDE的电脑,但思维门槛需要你跟上从“纯编码”

weixin_33908217的博客 473

Java全栈开发学习路径:从零基础到项目实战的完整指南

Java作为一门成熟稳定的编程语言,其核心优势在于跨平台的JVM和强大的并发处理能力,这使其成为企业级应用开发的主流选择。理解面向对象编程(OOP)的原理,掌握集合框架和多线程技术,是构建高性能后端服务的基础。在Web开发领域,Spring Boot框架通过自动配置和起步依赖,极大地简化了项目搭建,使得开发者能够快速构建Restful API。结合MyBatis或JPA等数据持久层框架,可以实现高效的数据操作。对于全栈开发者而言,还需要掌握前端技术,如Vue.js或React框架,以实现前后端分离的现代化应

weixin_30791095的博客 446

程序员必备1700专业词汇:构建技术沟通与高效学习的核心基石

在软件工程领域,掌握核心专业术语是高效协作与深度学习的基石。从数据结构与算法的基础概念,到系统架构的设计原理,再到CI/CD、Docker、Kubernetes等工程实践,这些词汇构成了技术沟通的通用语言。理解这些术语不仅能提升阅读官方文档、技术博客的效率,更能帮助开发者在技术评审、问题排查及学习新技术时精准表达。例如,理解Idempotent(幂等性)和Side Effect(副作用)等概念,对于设计可靠的分布式系统至关重要。本文聚焦于如何系统化学习覆盖软件开发全生命周期的1700个核心词汇,通过结构化分

dianning8393的博客 437

[leetcode-链表]707. Design Linked List

Design your implementation of the linked list. You can choose to use the singly linked list or the doubly linked list. A node in a singly linked list should have two attributes: val and next. val is t...

EminentBoy的博客 2504

Leetcode-707. 设计链表

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1...

han jan的博客 4927

【707】Design Linked List 设计链表

1。题目 2。解答 typedef struct A{ int val; struct A *next; } MyLinkedList; /** Initialize your data structure here. */ MyLinkedList* myLinkedListCreate() { MyLinkedList *head; head = (...

hello world 1538

【LeetCode】707. Design Linked List 解题报告(Python)

【LeetCode】707. Design Linked List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/design-linked...

负雪明烛 3080
上一篇: LeetCode算法题-Design HashMap(Java实现)
下一篇: LeetCode算法题-To Lower Case(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值