Javascript中的链表
function LinkedList() {
// 辅助类,表示加入链表的每一项
var Node=function(element){
this.element=element;
this.next=null;
}
// 列表,存储链表的长度
var length=0;
var head=null;
this.append=function(element){
var node=new Node(element),current;
if(head===null){
head=node;
}else{
current=head;
// 找到链表中的最后一个元素
while (current.next) {
current=current.next;
}
current.next=node;
}
length++;
};
this.insert=function(pos,element){
if (pos>=0 && pos<=length) {
var node=new Node(element),current=head,previous,index=0;
if(position===0){
node.next=current;
head=node;
}else{
while (index++<pos) {
previous=current;
current=current.next;
}
node.next=current;
previous.next=node;
}
length++;
return true;
}else{
return false;
}
};
this.removeAt=function(pos){
if(pos>-1 && pos<length){
var current=head,previous,index=0;
if(pos==0){
head=current.next;
}else{
while (index++<pos) {
previous=current;
current=current.next;
}
previous.next=current.next;
}
length--;
return current.element;
}else{
return null;
}
};
this.remove=function(element){
var index=this.indexOf(element);
return this.removeAt(index);//不太好,重复遍历了2次
};
this.indexOf=function (element) {
var current=head,index=0;
while (current) {
if(element===current.element){
return index;
}
index++;
current=current.next;
}
return -1;
};
this.isEmpty=function () {
return length===0;
};
this.size=function () {
return length;
};
this.toString=function(){
var current=head,str='';
while (current) {
str+=","+current.element;
current=current.next;
}
return str.slice(1);
};
this.print=function(){
console.log(this.toString());
};
this.getHead=function(){
return head;
}
}
function DoublyLinkedList() {
// 辅助类,表示加入链表的每一项
var Node=function(element){
this.element=element;
this.next=null;
this.prev=null;
}
// 列表,存储链表的长度
var length=0;
var head=null;
var tail=null;
this.append=function(element){
var node=new Node(element),current;
if(head===null){
head=node;
}else{
current=head;
// 找到链表中的最后一个元素
while (current.next) {
current=current.next;
}
current.next=node;
}
length++;
};
this.insert=function(pos,element){
if (pos>=0 && pos<=length) {
var node=new Node(element),current=head,previous,index=0;
if(pos===0){
if(!head){
head=node;
tail=node;
}else{
node.next=current;
current.prev=node;
head=node;
}
}else if(pos==length){
current=tail;
current.next=node;
node.prev=current;
tail=node;
}else{
while (index++<pos) {
previous=current;
current=current.next;
}
node.next=current;
node.prev=previous;
previous.next=node;
current.prev=node;
}
length++;
return true;
}else{
return false;
}
};
this.removeAt=function(pos){
if(pos>-1 && pos<length){
var current=head,previous,index=0;
if(pos==0){
head=current.next;
if(!length===1){
tail=null;
}else{
head.prev=null;
}
}else if(pos==length-1){
current=tail;
tail=current.prev;
tail.next=null;
}else{
while (index++<pos) {
previous=current;
current=current.next;
}
previous.next=current.next;
current.next.prev=current.prev;
}
length--;
return current.element;
}else{
return null;
}
};
this.remove=function(element){
var index=this.indexOf(element);
return this.removeAt(index);//不太好,重复遍历了2次
};
this.indexOf=function (element) {
var current=head,index=0;
while (current) {
if(element===current.element){
return index;
}
index++;
current=current.next;
}
return -1;
};
this.isEmpty=function () {
return length===0;
};
this.size=function () {
return length;
};
this.toString=function(){
var current=head,str='';
while (current) {
str+=","+current.element;
current=current.next;
}
return str.slice(1);
};
this.print=function(){
console.log(this.toString());
};
this.getHead=function(){
return head;
}
}
Javascript中的链表的更多相关文章
- javascript中的链表结构—从链表中删除元素
1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...
- javascript中的链表结构
1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...
- javascript中在链表中向前(向后)移动n个节点
1.概念 在链表上移动n个节点,我第一眼看到这个需求的时候首先想到的是当前节点.使用这个当前节点作为参考来移动,没有这个当前节点的话是没有办法在链表上前进和后退的.初始化定义链表的时候定义一个当前节 ...
- javascript中的链表结构—双向链表
1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- JavaScript中的算法之美——栈、队列、表
序 最近花了比较多的时间来学习前端的知识,在这个期间也看到了很多的优秀的文章,其中Aaron可能在这个算法方面算是我的启蒙,在此衷心感谢Aaron的付出和奉献,同时自己也会坚定的走前人这种无私奉献的分 ...
- JavaScript 中 4 种常见的内存泄露陷阱
了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...
- JavaScript中的内存泄漏以及如何处理
随着现在的编程语言功能越来越成熟.复杂,内存管理也容易被大家忽略.本文将会讨论JavaScript中的内存泄漏以及如何处理,方便大家在使用JavaScript编码时,更好的应对内存泄漏带来的问题. 概 ...
- JavaScript 中常见的内存泄露陷阱(摘)
内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内 ...
随机推荐
- Android 资源(resource详解(转)
本文介绍在Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(l ...
- Python字符串格式化
一.使用格式化符来格式化字符串: Python支持的所有格式化符 格式化符 意义 'd' 返回要格式化对象的十进制表示,如果可以 'i' 返回要格式化对象的十进制表示,如果可以 'o' 返回要格式化对 ...
- win10安装oracle 11g 报错 要求的结果: 5.0,5.1,5.2,6.0 6.1 之一 实际结果: 6.2
Windows10下安装Oracle11G.10G,都会提示如下信息 正在检查操作系统要求... 要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1 检查完成.此次检查的总体结果为 ...
- openGL漫游功能简单实现
最近弄openGL漫游功能的时候,在网上找了好多源码都没有达到预期效果,然后就自己写了一个算法分享一下. 上下键实现位移,左右键实现转动. 算法思想:由于改变观察点函数原型为: void gluLoo ...
- C语言函数的声明以及函数原型
C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错.但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明.所谓声明(Declaration),就是告诉编译器我 ...
- oracle存储过程常用技巧
我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集 ...
- Oracle数据访问组件ODAC的安装方法
Oracle数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序.我们可以编程调用这些组件来实现在没有安装Oracle数据库 ...
- 用 正则表达式 限定XML simpleType 定义
<xsd:simpleType name="ResTrictions"> <xsd:restriction base="xsd:string" ...
- nodejs ejs 请求路径和静态资源文件路径
/XXX 会跳转到 http://域名:端口/XXX ./XXX 会跳转到 当前路径+/XXX XXX(../XXX) 会跳转到 当前路径父级+XXX
- iOS开发零碎知识点
记录一些常用和不常用的iOS知识点,防止遗忘丢失.(来源为收集自己项目中用到的或者整理看到博客中的知识点),如有错误,欢迎大家批评指正:如有好的知识点,也欢迎大家联系我,添加上去.谢谢! 一.调用代码 ...