一个Javascript链表

function Entry(next, data)
{
       this.next = next
       this.data = data
}

function Iterator(node)
{
       this.cousor = node
       this.hasNext = function ()
       {
               return (this.cousor.next != null);
       }
       this.next = function ()
       {
               var rt = this.cousor.next
               this.cousor = this.cousor.next
               return rt.data
       }
}

function LinkedList()
{
       this.head = new Entry(null, null)
       this.size = function ()
       {
               var size = 0
               if (this.head == null)
               {
                       return size
               }

               var p = this.head.next
               for(; p!=null; p = p.next)
               size++;
               return size;
       }

       this.clear = function ()
       {
               this.head = null
       }

       this.getNode =  function (idx)
       {
               var pos = -1;
<script type="text/javascript"> </script>               var p = this.head
               while (p != null && pos < idx) {
                       p = p.next;
                       pos ++;
               }
               return p;
       }

       this.get = function (idx)
       {
               return this.getNode(idx).data
       }

       this.add = function (data)
       {
               this.insert(this.size(), data)
       }

       this.insert = function (idx, data)
       {
               var p = this.getNode(idx-1); /*注意查询idx-1*/
               if (p == null){
                       return
               }
               var node = new Entry(p.next, data)
               p.next = node
       }

       this.remove = function (idx)
       {
               var prenode = this.getNode(idx - 1)
               var node = this.getNode(idx)
               if (prenode == null || node == null)
               {
                       return null
<script type="text/javascript"> </script>               }
               prenode.next = node.next
               return node.data
       }

       this.iterator = function ()
       {
               return new Iterator(this.head)
       }

       this.swap = function (a, b)
       {
               var av = this.getNode(a)
               var bv = this.getNode(b)
               var tmp = av.data
               av.data = bv.data
               bv.data = tmp
       }
}

范例:
<script>
function Item(name, value)
{
        this.name = name
       this.value = value
}

function sample()
{
       var item1 = new Item("a", "1")
       var item2 = new Item("b", "2")
       var list = new LinkedList();
       list.add(item1)
       list.add(item2)

       for(var itr = list.iterator(); itr.hasNext(); )
       {
               var itm = itr.next();
               alert("name:" + itm.name + "/t value:" + itm.value)
       }

}
</script>
<script type="text/javascript"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值