首页 > 其他分享 >力扣: 设计链表

力扣: 设计链表

时间:2024-08-24 13:51:15浏览次数:11  
标签:力扣 cur val index int next 链表 设计

文章目录

在这里插入图片描述


需求

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

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

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

实现 MyLinkedList 类:
MyLinkedList() 初始化 MyLinkedList 对象。
int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。
void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。
void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。
void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。
void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。

示例:

输入
[“MyLinkedList”, “addAtHead”, “addAtTail”, “addAtIndex”, “get”, “deleteAtIndex”, “get”]
[[], [1], [3], [1, 2], [1], [1], [1]]
输出
[null, null, null, null, 2, null, 3]

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

提示:
0 <= index, val <= 1000
请不要使用内置的 LinkedList 库。
调用 get、addAtHead、addAtTail、addAtIndex 和 deleteAtIndex 的次数不超过 2000 。

代码

需求很明确, 简单. 就是要细心点.

public class Node{
    int val;
    Node next;
    public Node(int val, Node next) {
        this.val = val;
        this.next = next;
    }
} 

class MyLinkedList {
    int size;
    Node head;
    public MyLinkedList() {
        this.size = 0;
        this.head = new Node(-1, null);
    }

    public int get(int index) {
        if( index < 0 || index >= size ){
            return -1;
        }
        Node cur = head;
        cur = cur.next;
        for( int i = 0; i < index; i++ ){
            cur = cur.next;
        }
        return cur.val;
    }
    
    public void addAtHead(int val) {
        addAtIndex(0, val);
    }
    
    public void addAtTail(int val) {
        addAtIndex(size, val);
    }
    
    public void addAtIndex(int index, int val) {
        //  如果 index 比长度更大,该节点将 不会插入 到链表中。
        if( index > size ){
            return;
        }
        Node cur = head;
        for( int i = 0; i < index; i++ ){
            cur = cur.next;
        }
        cur.next = new Node(val, cur.next);
        size++;
    }
    
    public void deleteAtIndex(int index) {
        if( index < 0 || index >= size ){
            return;
        }
        Node cur = head;
        for( int i = 0; i < index; i++ ){
            cur = cur.next;
        }
        cur.next = cur.next.next;
        size--;
    }
}

执行后:

在这里插入图片描述


结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答…



标签:力扣,cur,val,index,int,next,链表,设计
From: https://blog.csdn.net/Snowyyds/article/details/141497060

相关文章

  • 设计模式之简单工厂模式
     简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。1.Factory:工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。在工厂类中提供了静态的工厂方法factoryMet......
  • 基于Node.js+vue青岛康家健康产业有限公司网站(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的迅猛发展,电子商务已成为企业拓展市场、提升品牌影响力的重要渠道。青岛康家健康产业有限公司,作为一家专注于健康产业的企业,在提供高质量健康产......
  • 基于Node.js+vue网上教学管理平台(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和普及,教育领域正经历着前所未有的变革。传统教学模式受限于时间和空间的束缚,难以满足学生个性化学习及灵活教学管理的需求。特别......
  • 基于Node.js+vue社交网站(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,社交网站已成为人们日常生活中不可或缺的一部分。它们不仅为人们提供了交流思想、分享生活的平台,还深刻影响着人......
  • 基于Node.js+vue摄影作品网站(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在数字化时代,摄影艺术以其独特的视觉语言,成为了人们记录生活、表达情感、传递思想的重要方式。随着互联网的普及和摄影技术的不断进步,摄影作品的展示与分享......
  • 基于Node.js+vue蜗牛兼职网(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在当今社会,随着经济的快速发展和就业市场的多元化,兼职工作已成为许多学生、职场新人乃至寻求灵活工作方式的职场人士的重要选择。然而,传统兼职信息的获取渠......
  • 基于Node.js+vue企业知识产权管理系统(程序+论文+开题报告)-计算机毕业设计
     本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球经济一体化的深入发展,企业知识产权已成为企业核心竞争力的重要组成部分,其保护与管理直接关系到企业的创新能力、市场地位及长远发展。当前,企业面......
  • 基于Node.js+vue食堂管理系统(程序+论文+开题报告)-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大及师生对校园生活品质要求的日益提升,食堂作为校园生活的重要组成部分,其管理效率与服务水平直接影响到师生的就餐体验与满意度。传统......
  • 基于nodejs+vueK13878玩具销售[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着消费市场的日益多元化和消费者需求的不断升级,玩具行业作为儿童娱乐与教育的重要载体,正经历着前所未有的变革与发展。K13878作为一款新兴或具有代表性的......
  • 基于nodejs+vueJava在线教育系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和教育理念的革新,在线教育已成为现代教育体系中的重要组成部分。特别是在编程语言学习领域,如Java,其复杂性和实用性要求学习者能够......