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 中常见的内存泄露陷阱(摘)
内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内 ...
随机推荐
- Ubuntu Kylin 14.04下配置JDK1.8
1.源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- win7 64位 asp+access 数据库连接出错[代码:02],请检查数据库链接文件中的连接字串
解决办法,启用32位应用程序改为true 打开“Internet 信息服务(IIS)管理器”,在最右边的窗口中点击“应用程序池”,在用到的应用程序池上点击右键,选择“高级设置”
- Python爬虫爬取百度贴吧的帖子
同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...
- ArcGis for Android 工作与学习
ArcGis安装 需求 windows7(32/64) Eclipse3.6以上版本 Android Sdk 2.2以上 Jdk 7 安装步骤 Eclipse安装 下载ArcGis插件 在Eclips ...
- windows shell api SHEmptyRecycleBin 清空回收站
HRESULT SHEmptyRecycleBin( HWND hwnd, LPCTSTR pszRootPath, DWORD dwFlags ); hwnd 父窗口句柄 pszRootPath 将 ...
- paper 119:[转]图像处理中不适定问题-图像建模与反问题处理
图像处理中不适定问题 作者:肖亮博士 发布时间:09-10-25 图像处理中不适定问题(ill posed problem)或称为反问题(inverse Problem)的研究从20世纪末成为国际上的 ...
- nginx,控浏览器缓存,前端优化方案
1,困惑 做web项目,对于开发者来说,一个最头痛的问题就是浏览器缓存,有缓存,js更改了,html更改了,发布服务器以后用户往往无法通过浏览器访问到最新的类容,需要用户主动去刷新页面, 因为一直做企 ...
- MySQL MMM 双主在Failover时挂起
两台MySQL服务器,版本Percona 5.5.35,配置双主,装在Centos 6.4下 Master1 db1,172.21.120.160(真实IP),172.21.120.173(Writ ...
- 集群间Session共享问题解决方案
两个基本概念的生命周期 session: 当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时s ...
- Linux时间戳和标准时间的互转
转http://hi.baidu.com/taolizao/blog/item/2d6f9a1ba50ef3eae0fe0ba9.html 在LINUX系统中,有许多场合都使用时间戳的方式表示时间 ...