16.10.2013, 23:38
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: node js связанный список
Можно еще добавить функцию очистки
LinkedList.prototype.clear = function () {
this.first = null;
this.last = null;
this.length = 0;
};
Upd: финальная версия

function LinkedList() {
this.first = null;
this.last = null;
this.length = 0;
}
if (module !== undefined) {
module.exports = LinkedList;
}
LinkedList.prototype.addToStart = function (value) {
var first = this.first;
var newItem = {
before: null,
after: first,
value: value
};
if (first) {
first.before = newItem;
}
if (this.last == null) {
this.last = newItem;
}
this.first = newItem;
this.length++;
return newItem;
};
LinkedList.prototype.add =
LinkedList.prototype.addToEnd = function (value) {
var last = this.last;
var newItem = {
before: last,
after: null,
value: value
};
if (last) {
last.after = newItem;
}
if (this.first == null) {
this.first = newItem;
}
this.last = newItem;
this.length++;
return newItem;
};
LinkedList.prototype.insertBefore = function (value, listItem) {
if (!listItem) {
throw new Error('listItem == null');
}
var newItem = {
before: listItem.before,
after: listItem,
value: value
};
if (newItem.before == null) {
this.first = newItem;
} else {
newItem.before.after = newItem;
}
listItem.before = newItem;
this.length++;
return newItem;
};
LinkedList.prototype.insertAfter = function (value, listItem) {
if (!listItem) {
throw new Error('listItem == null');
}
var newItem = {
before: listItem,
after: listItem.after,
value: value
};
if (newItem.after == null) {
this.last = newItem;
} else {
newItem.after.before = newItem;
}
listItem.after = newItem;
this.length++;
return newItem;
};
LinkedList.prototype.remove = function (listItem) {
if (listItem.before) {
listItem.before.after = listItem.after;
} else {
this.first = listItem.after;
}
if (listItem.after) {
listItem.after.before = listItem.before;
} else {
this.last = listItem.before;
}
this.length--;
};
LinkedList.prototype.clear = function () {
this.first = null;
this.last = null;
this.length = 0;
};
LinkedList.prototype.foreach = function (processItemCallback, onEndCallback) {
function nextItemProcessor(item) {
return function () {
if (item) {
processItemCallback(item, nextItemProcessor(item.after));
} else {
if (onEndCallback) onEndCallback();
}
};
}
nextItemProcessor(this.first)();
};
Последний раз редактировалось pax, 17.10.2013 в 10:20.
|
(Offline)
|
|