Показать сообщение отдельно
Старый 16.10.2013, 23:38   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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 = {
        
beforenull,
        
afterfirst,
        
valuevalue
    
};

    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 = {
            
beforelast,
            
afternull,
            
valuevalue
        
};

        if (
last) {
            
last.after newItem;
        }

        if (
this.first == null) {
            
this.first newItem;
        }

        
this.last newItem;
        
this.length++;

        return 
newItem;
    };


LinkedList.prototype.insertBefore = function (valuelistItem) {
    if (!
listItem) {
        throw new 
Error('listItem == null');
    }

    var 
newItem = {
        
beforelistItem.before,
        
afterlistItem,
        
valuevalue
    
};

    if (
newItem.before == null) {
        
this.first newItem;
    } else {
        
newItem.before.after newItem;
    }

    
listItem.before newItem;

    
this.length++;
    return 
newItem;
};

LinkedList.prototype.insertAfter = function (valuelistItem) {
    if (!
listItem) {
        throw new 
Error('listItem == null');
    }

    var 
newItem = {
        
beforelistItem,
        
afterlistItem.after,
        
valuevalue
    
};

    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 (processItemCallbackonEndCallback) {
    function 
nextItemProcessor(item) {
        return function () {
            if (
item) {
                
processItemCallback(itemnextItemProcessor(item.after));
            } else {
                if (
onEndCallbackonEndCallback();
            }
        };
    }
    
nextItemProcessor(this.first)();
}; 
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 17.10.2013 в 10:20.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (17.10.2013)