标签:数据结构 javascript
var Node = function (data) {
this.data = data;
this.next = null;
};
var LList = function () {
this.firstNode = null;
this.lastNode = null;
this.length = 0;
};
LList.prototype = {
clear: function () {
this.firstNode = null;
this.lastNode = null;
this.length = 0;
},
get: function (position) {
var currentNode = this.firstNode;
for (var i = 1; i < position + 1; i++) {
currentNode = currentNode.next;
}
return currentNode;
},
isEmpty: function () {
var result = false;
if (this.length == 0 && this.firstNode == null) {
result = true;
}
return result;
},
add: function () {
if (arguments.length == 1) {
data = arguments[0];
var newNode = new Node(data);
if (this.isEmpty()) {
this.firstNode = newNode;
} else {
this.lastNode.next = newNode;
}
this.lastNode = newNode;
this.length++;
return true;
} else if (arguments.length == 2) {
var isSuccessful = true;
var position = arguments[0];
var data = arguments[1];
if (position < this.length + 1) {
var newNode = new Node(data);
if (this.isEmpty()) {
this.firstNode = newNode;
this.lastNode = newNode;
} else if (position == this.length) {
this.lastNode.next = newNode;
this.lastNode = newNode;
} else if (position == 0) {
newNode.next = this.firstNode;
this.firstNode = newNode;
} else {
var nodeBefore = this.get(position - 1);
var nodeAfter = nodeBefore.next;
newNode.next = nodeAfter;
nodeBefore.next = newNode;
}
this.length++;
} else {
isSuccessful = false;
}
return isSuccessful;
}
},
display: function () {
var str = ‘‘;
var currentNode = this.firstNode;
while (currentNode != null) {
str += currentNode.data + ‘, ‘
currentNode = currentNode.next;
}
str = str.substr(0, str.length - 2);
console.log(str);
},
remove: function (position) {
var result = null;
if (!this.isEmpty() && (position < this.length)) {
if (position == 0) {
result = this.firstNode.data;
this.firstNode = this.firstNode.next;
this.lastNode = null;
} else {
var nodeBefore = this.get(position - 1);
var nodeToRemove = nodeBefore.next;
var nodeAfter = nodeToRemove.next;
nodeBefore.next = nodeAfter;
result = nodeToRemove.data;
if (position == this.length - 1) {
this.lastNode = nodeBefore;
}
}
this.length--;
}
return result;
},
set: function (position, data) {
var isSuccessfule = true;
if (!this.isEmpty() && (position < this.length)) {
var desireNode = this.get(position);
desireNode.data = data;
} else {
isSuccessfule = false;
}
return isSuccessfule;
},
contains: function (data) {
var found = false;
var currentNode = this.firstNode;
while (!found && (currentNode != null)) {
if (data === currentNode.data) {
found = true;
} else {
currentNode = currentNode.next;
}
}
return found;
},
size: function() {
return this.length;
},
reverse: function() {
var newList = new LList();
for(var i=this.length-1; i>=0; i--) {
newList.add(this.get(i).data);
}
return newList;
}
};
标签:数据结构 javascript
原文地址:http://blog.csdn.net/yinhaixiang/article/details/46048163