Второй день пошел, как я пытаюсь разобраться в этом вопросе, но без результатно.
Такое чувство, что упускаю что-то очень простое и кажется, что я уже сталкивался с подобным,
но сейчас в голову вообще не чего не приходит.

Код AS3:
package
{
import flash.display.Sprite;
public class Test extends Sprite
{
public function Test()
{
var nodes:Node;
for (var i:int = 0; i < 3; i++)
{
nodes = new Node(i, nodes);
}
var node:Node = nodes;
// делаю проверку
while (node)
{
trace(node.data, node.next, node.prev);
node = node.next;
}
// трейс выводится такой, какой я и ожидал
//2 [object Node] null
//1 [object Node] [object Node]
//0 null [object Node]
node = nodes;
var helpNode:Node = new Node(NaN);
while (node)
{
helpNode.data = node.data;
helpNode.next = node.prev;
helpNode.prev = node.next
helpNode = helpNode.prev// если закомментировать эту строчку то
// в трей выводится то же самое, что и в первый раз
// а если не комментировать, то выводится
//2 [object Node] null
//1 [object Node] [object Node]
//2 null null
// почему так ? Ведь я не изменяю node, а лишь
// обращаюсь к его свойствам...
trace(node.data, node.next, node.prev);
node = node.next;
}
}
}
}
class Node
{
public var data:*;
public var next:Node;
public var prev:Node;
public function Node(data:Object, next:Node = null)
{
this.data = data;
if (next)
{
next.prev = this;
this.next = next;
}
}
}
Добавлено через 13 минут
Вот так всегда, только спросишь и тут же ответ приходит.