Action Script 双向列表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package EView.controls
{
/*双向链表*/
public class DoubleNode
{
private var _data:*;
private var _prev:DoubleNode;
private var _next:DoubleNode;
private var _type:String
private var _hasIN:Boolean=false;
//构造函数
public function DoubleNode(initData:*,type:String)
{
_data=initData;
_prev=_next=null;
_type=type;
}
public function get_hasIn():Boolean
{
return _hasIN;
}
public function set_hasIN(boolean:Boolean):void
{
_hasIN=boolean;
}
public function get_next():DoubleNode
{
return _next;
}
public function get_prev():DoubleNode
{
return _prev;
}
public function set_next(newNode:DoubleNode):void
{
_next=newNode;
}
public function set_prev(newNode:DoubleNode):void
{
_prev=newNode;
}
public function get_nodeData():*
{
return _data;
}
public function get_nodeType():String
{
return _type;
}
public function set_nodeData(newData:*):void
{
_data=newData;
}
public function addAfter(newNode:DoubleNode):void
{
newNode._next=_next;
newNode._prev=this;
if(_next!=null)
{
_next._prev=newNode;
}
_next=newNode;
newNode._hasIN=true;
}
public function addBefore(newNode:DoubleNode):void
{
newNode._next=this;
newNode._prev=_prev;
if(_prev!=null)
{
_prev._next=newNode;
}
_prev=newNode;
newNode._hasIN=true;
}
public function get_nodeLength():uint
{
var cursor:DoubleNode;
var length:uint=1;
for(cursor=_prev; cursor!=null; cursor=cursor._prev)
{
length++;
}
return length;
}
public function unlink():void
{
if(_prev!=null)
_prev._next=_next;
if(_next!=null)
_next._prev=_prev;
_next=_prev=null;
_hasIN=false;
}
}
}