设计链表

一、题目

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。

在链表类中实现这些功能:

get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val  的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
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

二、题解

var Node = function(ele){this.ele = elethis.next = null
}/*** Initialize your data structure here.*/
var MyLinkedList = function() {this.head = new Node('head')
};/*** 查询 index 位下节点的值* @param {number} index* @return {number}*/
MyLinkedList.prototype.get = function(index) {var i = 0var current = this.headwhile(current.next){if(i == index){return current.next.ele}i++current = current.next}return -1
};/*** 插入到链表首位* @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtHead = function(val) {var current = this.headvar node = new Node(val)node.next = current.nextcurrent.next = node
};/*** 插入到链表首末位* @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtTail = function(val) {var current = this.headwhile(current.next){current = current.next}var node = new Node(val)current.next = node
};/*** 在 index 位置插入值为 val 的节点* @param {number} index* @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtIndex = function(index, val) {if(index < 0){this.addAtHead(val)return;}var current = this.headvar i = 0while(current.next){if(i == index){var node = new Node(val)node.next = current.nextcurrent.next = nodereturn;}i++current = current.next}this.addAtTail(val)return;
};/*** Delete the index-th node in the linked list, if the index is valid.* @param {number} index* @return {void}*/MyLinkedList.prototype.deleteAtIndex = function(index) {if(index < 0) return;var i = 0var current = this.headwhile(current.next){if(i == index){current.next = current.next.nextreturn;}i++current = current.next}
};

三、写在最后

本文是附加题,可能仅仅借助了二分思想中的一部分,加油!

如果对你有所帮助不妨给本项目的github 点个 star,这是对我最大的鼓励

关于我

  • 花名:余光
  • WX:j565017805
  • 沉迷 JS,水平有限,虚心学习中

其他沉淀

  • 前端进阶笔记
  • JS 版 LeetCode 题解
  • CSDN

LeetCode题解:707.设计链表相关推荐

  1. LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)

    文章目录 一.编程题:707. 设计链表(双向链表-带头尾双结点) 1.题目描述 2.示例1: 3.提示: 二.解题思路 1.思路 2.复杂度分析: 3.算法图解(双向链表) 三.代码实现 三.单向链 ...

  2. 力扣707设计链表(单链表,JavaScript)

    1,头指针指向列表第一个元素,尾指针指向链表最后一个元素,链表末尾的index=this.size-1 var MyLinkedList = function() {this.size=0this.h ...

  3. Suzy找到实习了吗Day 3 | 链表开始啦 203移除链表元素 707设计链表 206 反转链表

    定义链表的结构 class ListNode:def __init__(self, val, next=None): #构造函数self.val = valself.next = next 尾部nod ...

  4. leetcode 707 设计链表

    设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一个属性 ...

  5. LeetCode 707. 设计链表(List)

    文章目录 1. 设计一个单链表 2. 双向链表 1. 设计一个单链表 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值.如果索引无效,则返回-1. addAtHea ...

  6. Leetcode 707.设计链表

    传送门:力扣 答案在文后/ 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值.如果索引无效,则返回-1. addAtHead(val):在链表的第一个元素之前添加一 ...

  7. leetcode题解之相交链表

    ''' 编写一个程序,找到两个单链表相交的起始节点. 注意: 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构. 可假定整个链表结构中没有循环. 程序尽量满足 O(n) ...

  8. leetcode题解206-反转链表

    问题描述 反转一个单链表. 示例:输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路( ...

  9. leetcode算法题--设计链表

    原题链接:https://leetcode-cn.com/problems/design-linked-list/ class MyListNode{public:int val;MyListNode ...

  10. My Seventh Page - 设计链表 - By Nicolas

    这一篇page对应的是leetcode上面707.设计链表这个题目,首先这个题目的描述还是比较简单的,就是我们可以选择使用单链表或者双链表实现链表对应的增删改查的许多功能.小尼这个题目大部分都是看的题 ...

最新文章

  1. 数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
  2. 地球系统科学简史:理解地球复杂性的多学科探索历程
  3. BestCoder Round #80 1002
  4. 皮一皮:双11到底买了啥...
  5. 调度器Quartz的简述与使用总结
  6. s9 Linux 进程管理命令
  7. 四、spring中高级装配(2)
  8. python 单例模式的实现方法_python中单例模式的四种实现方式
  9. .NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)
  10. ES6学习(var,let,const区别)
  11. Ubuntu18.04搭建Web服务器
  12. onload 事件、DOMContentLoaded事件、DOM加载顺序
  13. android定义多个上下文菜单,Android编程实现为ListView创建上下文菜单(ContextMenu)的方法...
  14. apache 的batik生成svg文件和通过swing界面查看效果
  15. 遗传算法及c++实现
  16. (01)ORB-SLAM2源码无死角解析-(18) SVD奇异值分解→求解Homography,Fundamental矩阵,了解矩阵自由度
  17. 培训机构毕业的程序员被歧视的背后逻辑
  18. vue页面无操作30分钟退出登录
  19. torch.nn.CosineSimilarity() 三维张量
  20. thinkpade450装内存条_Thinkpad e450c我想加一个内存条,因为开机就满了百分50左右,该加什么样的内存条?低电...

热门文章

  1. 2021-02-14马克思主义概论
  2. 忘记了mysql的root密码(分享:重置密码过程)
  3. 前端之vue表格居中处理
  4. chrome浏览器拖拽安装crx插件无反应的解决方案
  5. 【数据仓库与OLAP技术】期末复习+考题
  6. 《SEM长尾搜索营销策略解密》一一2.4 长尾的主动与被动
  7. 软件工程-基本流程图
  8. Python入门基础(8)--私有化属性和方法/Property属性/_new_方法/单例模式/错误和异常处理/Python动态添加属性和方法/_slots_属性
  9. python对图片进行裁剪_python利用四个坐标点对图片进行裁剪
  10. 信号的同调性(Coherence)分析及MATLAB实例