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 中常见的内存泄露陷阱(摘)
内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内 ...
随机推荐
- 关于使用FusionCharts生成图表时出现invalid xml data错误提示的解决方法
FusionCharts的确功能是够强大的.收集的功能估计更强大.在初次使用时,对着手册,一步一步操作,就是生成图表工具不成功.一直报"Invalid xml data"错误.后面 ...
- WIN10 多用户登录
WIN10 多用户登录 参考下面链接 http://www.mysysadmintips.com/windows/clients/545-multiple-rdp-remote-desktop-ses ...
- Linux上USB移植错误解决笔记
在内核目录下先配置支持USB设备,无论你是什么设备,这一步都是必须的,USB驱动和其他的驱动不同,它分为USB设备驱动,另外还有USB-Host主机控制器的驱动,配置如下: Device Driver ...
- Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理
Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Fr ...
- Material Design Lite,简洁惊艳的前端工具箱 之 交互组件。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, 博客地址为http://www.cnblogs.com/jasonnode/ . 网站上有对应 ...
- SQL Server取datetime的日期部分
在c#中有个Date属性用于返回日期,其实就是当天0点. DateTime dtNow = DateTime.Now; DateTime dtNow2 = dtNow.Date; Console.Wr ...
- Linux_用户级_常用命令(1):ls
开篇语:懒是人类进步的源动力 本文原创,专为光荣之路公众号所有,欢迎转发,但转发请务必写出处! Linux常用命令第1集包含命令:ls 一.何为常用命令 人和系统交互的指令集合,构成了shell.Sh ...
- 剑指offer:赋值运算符函数和复制构造函数
赋值运算符函数 对于定义一个赋值运算符函数时,需要注意一下几点: (1)函数的返回类型必须是一个引用,因为只有返回引用,才可以连续赋值 (2)传入的参数声明为常量引用,可以提高代码效率,同时赋值运算函 ...
- Android 逐帧动画
原理: 逐帧动画是最简单的一种动画.原理就是把几张图片连续显示出来,以达到动画的效果.就相当于下面这种手绘翻页动画啦~ 实现: 1.需要建立一个animation-list来设置静态图片资源.持续时间 ...
- weboffice控件使用不能嵌入网页
var s = ""s += "<object id=WebOffice1 height=586 width='100%' style='LEFT: 0px; TO ...