1,头指针指向列表第一个元素,尾指针指向链表最后一个元素,链表末尾的index=this.size-1


var MyLinkedList = function() {this.size=0this.head=nullthis.tail=null
};//创建节点的函数
var Node=function(val,next){this.val=val ||0this.next=next || null
}/** * @param {number} index* @return {number}*/
MyLinkedList.prototype.get = function(index) {//如果大于this.size-1,无效if(index>this.size-1){return -1}//如果index是头节点if(index===0){return this.head.val}//如果是尾节点(尾节点指向最后一个节点)if(index===this.size-1){return this.tail.val}//index是0到(this.size-1)的值//找到indexlet temp=this.headlet i=0while(i<index){i++temp=temp.next}return temp.val
};/** * @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtHead = function(val) {//如果链表为空if(this.head===null){//头指针和为指针都指向新添加的节点this.head=this.tail=new Node(val)//更新链表长度this.size++return}//链表不为空//创建新节点,next指向原this.headlet node=new Node(val,this.head)//更新头节点this.head=node//更新链表长度this.size++
};/** * @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtTail = function(val) {//如果为空链表if(this.head===null){//头指针和为指针都指向新添加的节点this.head=this.tail=new Node(val)//更新链表长度this.size++return}//链表不为空//把尾指针指向该新节点let node=new Node(val)//连接this.tail.next=node//更新尾节点this.tail=node//更新长度this.size++
};/** * @param {number} index * @param {number} val* @return {void}*/
MyLinkedList.prototype.addAtIndex = function(index, val) {//index超出链表长度if(index>this.size){return false}//index<=0,在第一个位置插入if(index<=0){return this.addAtHead(val)}//index==this.size,在末尾插入if(index===this.size){return this.addAtTail(val)}//index是1到(this.size-1)处插入//插入应找到index-1的位置let i=0let temp=this.headwhile(i<index-1){temp=temp.nexti++}//创建新节点let node=new Node(val)//插入//连接let cur=temp.nexttemp.next=nodenode.next=curthis.size++
};/** * @param {number} index* @return {void}*/
MyLinkedList.prototype.deleteAtIndex = function(index) {//index超出范围if(index>this.size-1){return}//删除头节点if(index===0){this.head=this.head.nextthis.size--return}//删除index(1到this.size-1)//找到index-1let i=0let temp=this.headwhile(i<index-1){temp=temp.nexti++}//删除temp.next=temp.next.next//如果是尾节点,需要更新尾指针if(index===this.size-1){this.tail=temp}this.size--};

参考此视频讲解707.设计链表_哔哩哔哩_bilibili

力扣707设计链表(单链表,JavaScript)相关推荐

  1. c语言单链表设计报告,单链表实验报告

    <数据结构>实验报告二 分校: 学号: 日期: 班级: 姓名: 程序名: L2311.CPP 一.上机实验的问题和要求: 单链表的查找.插入与删除.设计算法,实现线性结构上的单链表的产生以 ...

  2. 力扣合并两个有序链表

    力扣合并两个有序链表 1.要求 2.思路及代码 3.问题 1.要求 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1-& ...

  3. 建立单链表 单链表的插入_单链列表插入

    建立单链表 单链表的插入 All possible cases: 所有可能的情况: Inserting at beginning 开始插入 Inserting at the ending 在末尾插入 ...

  4. 数据结构上机-尾、头插法建立单链表-单链表遍历C语言完整代码实现

    点击此处跳转视频链接:数据结构上机-尾.头插法建立单链表-单链表遍历C语言完整代码实现

  5. 力扣114. 二叉树展开为链表(C++,解释一下别人的思路)

    题目链接: 114. 二叉树展开为链表 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/flatten-binary- ...

  6. 由力扣K 个一组翻转链表到360原创题

    前段时间帮对象做360笔试题时,遇到一个没怎么想明白的编程题,直到今天刷力扣遇到了相似的k个一组翻转链表后,想着在做一下那天的编程题,就想着记录一下遇到的难点. 力扣题如下图所示: 360原创题如下: ...

  7. 反转链表(力扣简单题)(链表)

    反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1 ...

  8. 单链表-单链表拆分为A和B链表(尾插法+头插法)

    题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...

  9. 单链表-单链表拆分为两个线性表(尾插法+尾插法)

    题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...

最新文章

  1. Android 中文API (92) —— MenuInflater
  2. 在线判题系统hustoj的搭建
  3. vue中使用watch监听$route 无效问题
  4. 如何在Ubuntu系统下搭建Android开发环境
  5. 转:OAUTH协议简介
  6. C++中成员初始化列表的使用
  7. 两台电脑怎么共享_怎么在电脑上创建共享文件(必须是在同一个网段)
  8. java组合与继承始示例_Java 9功能与示例
  9. 连续竞价java_Java 方法method
  10. 实战篇:如何用Keras建立神经网络(附全部代码) 1
  11. Warning: Failed prop type: The prop 'bounces' is marked as required in 'PagerAndroid', but it's valu
  12. sqlmap tamper mysql_sqlmap之常用tamper脚本
  13. PLSQL Developer几个可能的隐患
  14. 每个人都可以用的开源微信机器人
  15. 微信小程序实现画布各种手机尺寸自适应
  16. 【Markdown语法】字体颜色大小及文字底色设置
  17. “SCSA-S学习导图+”系列:文件包含
  18. 思科《计算机网络》期末考试答案A卷
  19. 如何清理C盘(小白版)
  20. python实现用户登录注册界面_实现前后端登录注册界面

热门文章

  1. 驱动专题:第四章MTD及Flash驱动 3. nandflash 详细硬件特性
  2. 系动词分类【大学英语笔记】
  3. UVA10306 - e-Coins(二维完全背包)
  4. MFC设置窗体背景图片的办法
  5. 【转】机器学习embedding
  6. Android 12上焕然一新的小组件
  7. iOS开发可以调节屏幕亮度并且上传APPstore
  8. Hive中使用sort_array函数解决collet_list列表排序混乱问题
  9. API文档工具knife4j使用详解
  10. 解决微信小程序RangeError: WebAssembly.instantiate(): Out of memory: wasm memory内存不足问题