首页 > 编程语言 >【JavaScript】LeetCode:707设计链表

【JavaScript】LeetCode:707设计链表

时间:2024-09-14 20:52:21浏览次数:11  
标签:index 707 cur val JavaScript next 链表 var 节点

文章目录

题目内容

在这里插入图片描述

题目分析

  • 添加哨兵节点dummy。
  • 在第n个节点前插入节点时,应该找到第n - 1个节点(即前一个节点),才能完成插入操作。
  • 在删除第n个节点时,应该找到第n - 1个节点(即前一个节点),才能完成删除操作。

(1) 获取第n个节点的值

  • cur指向头节点(第0个节点是头节点),cur向后移动n次后,指向第n个节点。
MyLinkedList.prototype.get = function(index) {
    if(index < 0 || index > this.size - 1){
        return -1;
    }
    var cur = this.dummy.next;
    while(index){
        cur = cur.next;
        index--;
    }
    return cur.val;
};

(2) 头部插入节点

  • 新建待插入节点headNode。
  • ① headNode节点指向头节点。
  • ② 哨兵节点指向headNode节点。
  • 链表长度+1。
MyLinkedList.prototype.addAtHead = function(val) {
    var headNode = new ListNode(val);
    headNode.next = this.dummy.next;
    this.dummy.next = headNode;
    this.size++;
};

(3) 尾部插入节点

  • 新建待插入节点tailNode,新建节点自动指向null。
  • cur指向哨兵节点,cur一直向后移动,直到找到尾节点。
  • ① 原尾节点指向tailNode节点,tailNode节点成为新尾节点。
  • 链表长度+1。
MyLinkedList.prototype.addAtTail = function(val) {
    var tailNode = new ListNode(val);
    var cur = this.dummy;
    while(cur.next != null){
        cur = cur.next;
    }
    cur.next = tailNode;
    this.size++;
};

(4) 第n个节点前插入节点

  • 新建待插入节点newNode。
  • cur指向哨兵节点,cur向后移动n次后,指向第n - 1个节点。
  • ① newNode节点指向第n个节点。
  • ② 第n - 1个节点指向newNode节点。
  • 链表长度+1。
MyLinkedList.prototype.addAtIndex = function(index, val) {
    if(index < 0 || index > this.size){
        return;
    }
    var newNode = new ListNode(val);
    var cur = this.dummy;
    while(index){
        cur = cur.next;
        index--;
    }
    newNode.next = cur.next;
    cur.next = newNode;
    this.size++;
};

(5) 删除第n个节点

  • cur指向哨兵节点,cur向后移动n次后,指向第n - 1个节点。
  • ① 第n - 1个节点指向第n + 1个节点(第n个节点的下一个节点)。
  • 链表长度-1。
MyLinkedList.prototype.deleteAtIndex = function(index) {
    if(index < 0 || index > this.size - 1) {
        return;
    }
    var cur = this.dummy;
    while(index){
        cur = cur.next;
        index--;
    }
    cur.next = cur.next.next;
    this.size--;    
};

完整代码

function ListNode(val, next) {
    this.val = (val===undefined ? 0 : val);
    this.next = (next===undefined ? null : next);
}

var MyLinkedList = function() {
    this.size = 0;
    this.dummy = new ListNode();
};

/** 
 * @param {number} index
 * @return {number}
 */
MyLinkedList.prototype.get = function(index) {
    if(index < 0 || index > this.size - 1){
        return -1;
    }
    var cur = this.dummy.next;
    while(index){
        cur = cur.next;
        index--;
    }
    return cur.val;
};

/** 
 * @param {number} val
 * @return {void}
 */
MyLinkedList.prototype.addAtHead = function(val) {
    var headNode = new ListNode(val);
    headNode.next = this.dummy.next;
    this.dummy.next = headNode;
    this.size++;
};

/** 
 * @param {number} val
 * @return {void}
 */
MyLinkedList.prototype.addAtTail = function(val) {
    var tailNode = new ListNode(val);
    var cur = this.dummy;
    while(cur.next != null){
        cur = cur.next;
    }
    cur.next = tailNode;
    this.size++;
};

/** 
 * @param {number} index 
 * @param {number} val
 * @return {void}
 */
MyLinkedList.prototype.addAtIndex = function(index, val) {
    if(index < 0 || index > this.size){
        return;
    }
    var newNode = new ListNode(val);
    var cur = this.dummy;
    while(index){
        cur = cur.next;
        index--;
    }
    newNode.next = cur.next;
    cur.next = newNode;
    this.size++;
};

/** 
 * @param {number} index
 * @return {void}
 */
MyLinkedList.prototype.deleteAtIndex = function(index) {
    if(index < 0 || index > this.size - 1) {
        return;
    }
    var cur = this.dummy;
    while(index){
        cur = cur.next;
        index--;
    }
    cur.next = cur.next.next;
    this.size--;    
};

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * var obj = new MyLinkedList()
 * var param_1 = obj.get(index)
 * obj.addAtHead(val)
 * obj.addAtTail(val)
 * obj.addAtIndex(index,val)
 * obj.deleteAtIndex(index)
 */

标签:index,707,cur,val,JavaScript,next,链表,var,节点
From: https://blog.csdn.net/weixin_45980065/article/details/142264428

相关文章

  • 【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码
    【工具】前端JavaScript代码在线执行器方便通过网页手机测试js代码自动补全js代码格式化代码色彩打印日志清空日志待补充<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,ini......
  • 4、循环单链表
    1、代码实现#include<stdio.h>#include<malloc.h>#include<assert.h>typedefintElemType;typedefstructNode{ElemTypedata;structNode*next;}Node,*PNode;typedefstructSCList{PNodefirst;PNodelast;intsize;}S......
  • JavaScript语法入门六 数据类型
    数据类型JavaScript数据类型有8种,分别是number、bigint、string、boolean、null、undefined、symbol、object。JavaScript是一种弱类型语言,或者说动态类型语言。即每一个变量的类型在定义之后可变化的,JavaScript根据使用情况自动识别。number类型整数、浮点数。范围:常规的数字、Inf......
  • JavaScript空值判断
    JavaScript本身没有判断一个变量是不是空值的函数,因为变量有可能是string,object,number,boolean等类型,类型不同,判断方法也不同。所以在文章中写了一个函数,用以判断JS变量是否空值,如果是undefined,null,'',NaN,false,0,[],{},空白字符串,都返回true,否则返回false。functionisEmpty(v){sw......
  • 19_删除链表的倒数第N个结点
    19_删除链表的倒数第N个结点【问题描述】给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例一:输入:head=[1],n=1输出:[]示例二:输入:head=[1,2],n=1输出:[1]提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=1001<=n<=sz【算......
  • 3、静态链表
    1、静态链表初始化head指向-1代表当前为空链表,pool指向下一个可用空间(在数组下标为2的空间),2指向3,3指向4,最后的指向0表示没有下一个节点,以此链接起来。2、实现代码#include<stdio.h>#include<malloc.h>#defineMAX_SIZE20typedefcharElemType;typedefstructS......
  • 链表
    1、创建链表-无头结点#include<stdio.h>#include<malloc.h>#include<assert.h>typedefintElemType;//定义链表typedefstructListNode{ElemTypedata;structListNode*next;}ListNode;typedefListNode*PList;//初始化链表,让链表一开始指向为空v......
  • 华为OD机试真题-寻找链表的中间节点-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客   题目描述给定一个单链表QL,请编写程序输出L中间结点保存的数据,如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7,给定L为1→2→3→4,则输......
  • JavaScript之填充数组的五种方法
    点击跳转填充字符串方法填充数组是一种常见的操作,尤其是当你需要初始化数组或填充默认值时。本文将介绍几种不同的方法来填充数组,每种方法都有其适用的场景和用法。1.使用Array.prototype.fill()fill()方法是最直接的填充数组的方式。它可以用指定的值填充数组的所有......
  • C语言----使用链表实现的客户管理系统
    实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。学完了C语言和链表没事情干拿出来写一写,检测下学习成果#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructNode{intnum;charname[20];chargender;......