javascript算法-单链表
链表相比数组更具灵活性和扩展性。主要有节点数据以及指向节点的指针所构成。
链表中节点的实现【元素和指针】:
let Node = function( element ){
this.element = element;
this.next = null;
};
单链表的实现:
function LinkedList(){
let Node = function( element ){
this.element = element;
this.next = null;
};
let head = null;
let length = 0;
this.append = function( element ){
let newNode = new Node( element );
let current = null;
if( head == null ){
head = newNode;
}else{
current = head;
while( current.next ) {
current = current.next;
}
current.next = newNode;
}
length++;
};
this.size = function(){
return length;
};
this.removeAt = function( pos ){
if( pos > -1 && pos < length ){
var current = head,
index = 0,
prev = null;
if( pos == 0 ){
head = current.next;
}else{
while( index++ < pos ){
prev = current;
current = current.next;
}
prev.next = current.next;
length--;
return current.element;
}
}else{
return null;
}
};
this.print = function(){
let current = head;
while( current ){
console.log( current.element );
current = current.next;
}
};
this.insert = function( pos, element ){
let newNode = new Node( element );
let current, prev, index = 0;
current = head;
if( pos >= 0 && pos <= length ){
if( pos == 0 ){
newNode.next = head;
head = newNode;
}else{
while( index++ < pos ){
prev = current;
current = current.next;
}
newNode.next = current;
prev.next = newNode;
}
length++;
return true;
}else {
return false;
}
};
this.toString = function(){
let current = head, string = '';
while( current ){
string += current.element + ',';
current = current.next;
}
return string.substring( 0, string.length - 1 );
};
this.indexOf = function( element ){
let current = head, index = -1;
while( current ){
index++;
if( current.element == element ){
return index;
}
current = current.next;
}
return -1;
};
this.remove = function( element ){
let pos = this.indexOf( element );
return this.removeAt( pos );
};
this.isEmpty = function(){
return length == 0;
};
this.getHead = function(){
return head;
}
}
var oLink = new LinkedList();
oLink.append( "java" );
oLink.append( "php" );
oLink.append( "javascript" );
oLink.append( "python" );
oLink.print();
console.log( "-----------------------节点个数------------------------")
console.log( oLink.size() );
console.log( "-----------------------删除第2个元素之前------------------------")
console.log( oLink.removeAt( 2 ) );
console.log( "-----------------------删除第2个元素之后------------------------")
oLink.print();
console.log( "节点个数");
console.log( oLink.size() );
console.log( "-----------------------插入节点前------------------------")
oLink.insert( 0, "c语言" );
oLink.insert( 3, "c++语言" );
console.log( "-----------------------插入节点后------------------------")
oLink.print();
oLink.insert( 4, "erlang语言" );
console.log( "-----------------------插入节点后------------------------")
oLink.print();
console.log( "-----------------------节点个数------------------------")
console.log( oLink.size() );
console.log( "-----------------------toString------------------------")
console.log( oLink.toString() );
console.log( "------------------------indexOf-----------------------" );
console.log( oLink.indexOf( "c语言2" ) );
console.log( "------------------------clear-----------------------" );
oLink.print();
javascript算法-单链表的更多相关文章
- js数据结构与算法--单链表的实现与应用思考
链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...
- 数据结构&算法-单链表
1.引言 工作一年了,感觉越来越懒散,把很多基础性的东西都慢慢遗忘了,最近想趁着还没忘完,回顾一下,整理了点笔记,分享一下. 如有错的地方,欢迎大家怒喷. 2.学习 我们就从最简单的链表开始吧. 链表 ...
- [算法] 单链表插入排序(java)
实现 首先保证插入前的链表是个完整的,最后一个节点要断开 然后在插入前链表中找到比待插入节点大的最小元素,插到前面即可 Link.java class Link { private class Nod ...
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现
Reverse反转算法 #include <iostream> using namespace std; //交换的函数 void replaced(int &a,int & ...
- C++ 单链表的基本算法
线性表是最简单,最常用的一种数据结构.线性表的逻辑结构是n个数据元素的有限序列(a1,a2,…,an).而线性表的物理结构,我们已经学习过顺序表,也就是数组 :另一种线性表的物理结构——链表 . 什么 ...
- 特殊的反转单链表算法(C++)
普通的单链表反转算法 大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转. ListNode* reverseList(ListNode* head) { Li ...
- cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针
实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a- ...
随机推荐
- 开源播放器 ijkplayer (五) :Linux/Ubuntu 下编译ijkplayer
一.安装Git与yasm sudo apt-get install git sudo apt-get install yasm 二.下载和配置 SDK.NDK SDK一般开发时肯定都有的,NDK一般是 ...
- Javascript高级编程学习笔记(32)—— 客户端检测(1)能力检测
能力检测 浏览器厂商虽然在实现公共接口方面投入了大量的精力 但是每种浏览器仍旧存在许多差异 为了让网页能跨浏览器的运行,对浏览器差异做的兼容处理自然无法避免 其中最常用的也就是我们现在所说的能力检测 ...
- springmvc的Controller里实现转发的同时弹出提示对话框
以前写servlet时就用到这个,但是现在学了springMVC+hibernate后就不知道怎么实现了,后来在网上找了好多,看了好多,最后经过自己实践成功的如下: 1.首先是Controller控制 ...
- ThinkPHP 5隐藏public/index.php方法
1.复制public下的index.php与.htaccess文件至根目录: 2.直接修改index.php,将内容修改为:<?php require 'public/index.php'; ? ...
- linux定时任务执行没结果,手动执行有结果问题总结
今天写了个脚本手动执行有结果,但是放到系统定时任务跑却没结果,之前也遇到这种问题解决了没记录后面又懵逼了一次~~~ 如下图: 手动执行有结果 放到定时任务中每五分钟执行一次 解决方法: 脚本中加载系统 ...
- 【python小工具】我在bilibili个人资料里控制家里的电脑
今天在52学习到的,大佬A是在网易云音乐 歌单设置 里,过程没看到,封装一个exe了,可以控制本地cmd命令\ 思路很奇特,想了一下感觉实现应该简单,就打算自己实现一下\ 两步走:网页正则和本地 ...
- php5.5+apache2.4+mysql5.7在windows下的配置
apache2.4下载和安装 下载apache2.4 https://www.apachelounge.com/download/VC11/ 提取解压目录Apache24到d:/dev/Apache2 ...
- html自适应头
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-sca ...
- iOS逆向开发(0):修改二进制代码与重签名 | hopper | codesigh
小白:小程,你知道有些iOS程序是没人性的吗?老是不按我的意愿来运行! 小程:我怎么知道你的意愿就是有人性的? 本文解决一个问题:修改别人的二进制程序并运行起来. 让别人的程序按你的意愿来运行,文明一 ...
- Linux 在文件夹的所有文件中查找某字符
命令: grep -r -e string directory eg: 在 /home 目录下的所有文件中查找包含 test 字符串的文件. grep -r -e "test" / ...