7、双向链表

原创 2017年01月03日 17:23:20
var log = console.log;

function Node(element){
	this.element = element;
	this.next = null;
	this.previous = null;
}

function LList(){
	this.head = new Node("head");
	this.find = find;
	this.findLast = findLast;
	this.insert = insert;
	this.remove = remove;
	this.findPrevious = findPrevious;
	this.findNext = findNext;
	this.display = display;
	this.dispReverse = dispReverse;
}

function find(item){
	var currNode = this.head;
	while(currNode.element != item){
		currNode = currNode.next;
	}
	return currNode;
}

function findPrevious(item){
	var currNode = this.find(item);
	if(currNode.previous != null){
		currNode = currNode.previous;
	}else{
		currNode = this.head;
	}
	return currNode;
}

function findNext(item){
	var currNode = this.find(item);
	if(currNode.next != null){
		currNode = currNode.next;
	}else{
		currNode = this.head;
	}
	return currNode;
}

function findLast(){
	var currNode = this.head;
	while(currNode.next != null){
		currNode = currNode.next;
	}
	return currNode;
}

function insert(newElement, item){
	var newNode = new Node(newElement);
	var current = this.find(item);
	newNode.next = current.next;
	newNode.previous = current;
	current.next = newNode;
}

function remove(item){
	var currNode = this.find(item);
	if(currNode.next != null){
		currNode.previous.next = currNode.next;
		currNode.next.previous = currNode.previous;
		currNode.next = null;
		currNode.previous = null;
	}
}

// 反向输出
function dispReverse(){
	var str = "";
	var currNode = this.head;
	currNode = this.findLast();
	while(currNode.previous != null){
		str += currNode.element + " ";
		// log(currNode.element);
		currNode = currNode.previous;
	}
	log(str);
}

function display(){
	var str = "";
	var currNode = this.head;
	while(currNode.next != null){
		str += currNode.next.element + " ";
		// log(currNode.next.element);
		currNode = currNode.next;
	}
	log(str);
}

var words = new LList();
words.insert("Late", "head");
words.insert("in", "Late");
words.insert("autumn", "in");
words.insert("winner", "autumn");
words.display();
log("-----");

log("//删除 'autumn'");
words.remove("autumn");
words.display();

log("-----");
log("//在 'in' 后插入 'phaser'");
words.insert("phaser", "in");
words.display();

log("-----");
log("//反向输出");
words.dispReverse();




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

看数据结构写代码(7)具有实用意义的双向链表

// LinkList.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include typedef int ElementType; enum E_...

c语言实现的双向链表

  • 2016年07月31日 15:45
  • 21KB
  • 下载

Java 数据结构之双向链表

一、概述:1、什么时双向链表: 链表中的每个节点即指向前面一个节点,也指向后面一个节点,就像丢手绢游戏一样,每个人都手拉手 2、从头部插入 要对链表进行判断,如果为空则设置尾节点为新添加的节...
  • lovoo
  • lovoo
  • 2016年06月27日 21:09
  • 4169

排序树 变成双向链表

  • 2014年09月14日 20:58
  • 521B
  • 下载

双向链表——1

  • 2014年05月02日 17:02
  • 524B
  • 下载

利用双向链表实现约瑟夫问题

输入n个数,围城一圈,输入数字m,从第一个数开始数,数到第m个数删除这个数,然后继续数,数到下一个第m个数时,删除该数,直到剩下最后一个数。输出最后一个数。 利用双向循环链表实现: LinkNod...

双向链表操作

  • 2014年10月28日 11:22
  • 36KB
  • 下载

Redis源码学习3-基本数据结构之双向链表

1楔子 双向链表为redis列表类型的实现方法之一,列表类型实现除了用到双向链表,还有压缩列表。因为双向链表占用内存较多,所以redis优先采用压缩列表来实现自己的列表类型。压缩列表后续分析,先看看双...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:7、双向链表
举报原因:
原因补充:

(最多只允许输入30个字)