Home  >  Article  >  Web Front-end  >  Specific implementation example of js one-way linked list_javascript skills

Specific implementation example of js one-way linked list_javascript skills

WBOY
WBOYOriginal
2016-05-16 17:31:531103browse

Copy code The code is as follows:

function linkNode(_key, _value)
{
///
/// Node class of linked list class
///

this.Key = _key;
this.Value = _value;
this.next = null;
}
function Link()
{
/// /// Create a linked list class
///
this.root = new linkNode(null, null); //root is always an empty node
this.end = this.root;
}
Link.prototype =
{
count: 0,
value: function (_key)
{
///
                                                                                    . // The value of key
                                                                                                                                                                                                                                                           ;/returns>
var i = this.root;
while (Boolean(i = i.next))
{
if (i.Key == _key)
return i. Value;
}
},
add: function (_key, _value)
{
///
/// Add a node to the end of the linked list
///

param>
///
/// The value of value
///
/// < ;returns type = "Object"> i = i.next))
                                                                                                                                                                                                                                                                                            value) ;
if (this.count == 0)
this.root.next = node;
else
this.end.next = node;
this.end = node;
this.count ;
return _value;
},
    insert: function (_key, node)
    {
        ///
        /// 从链表类的某节点之后插入新节点node.
        ///

        ///
        /// 在键值等于_key的元素之后插入
        ///
        ///
        /// 要插入的元素
        ///
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.Key == _key)
            {
                var tmp = i.next;
                i.next = node;
                node.next = tmp;
                break;
            }
        }
    },
    insertBefore: function (_key, node)
    {
        ///
        /// 从链表类的某节点之后插入新节点node.
        ///

        ///
        /// 在键值等于_key的元素之后插入
        ///
        ///
        /// 要插入的元素 www.jb51.net
        ///
        var i = this.root;
        while (Boolean(i = i.next))
        {
            if (i.next.Key == _key)
            {
                var tmp = i.next;
                i.next = node;
                node.next = tmp;
                break;
            }
        }
    },
    remove: function (_key)
    {
        ///
        /// 从链表类中移除一个key
        ///

        ///
        /// key的值
        ///
        var i = this.root;
        do
        {
            if (i.next.Key == _key)
            {
                if (i.next.next == null)
                    this.end = i;
                i.next = i.next.next;

this.count--;
return;
}
} while (Boolean(i = i.next))
},
exists: function (_ key)
{
///


/// Check whether there is a key
in the linked list class type="String">
/// The value of key
/// ;/returns>
var i = this.root;
while (Boolean(i = i.next))
if (i.Key == _key)
return true;
return false;
},
removeAll: function ()
{
🎜> this.root = new linkNode(null, null);
this.end = this.root;
this.count = 0;
},
Obj2str: function (o)
{
if (o == undefined)
{
return "";
}
var r = [];
if (typeof o == "string")
              return """ o.replace(/(["\])/g, "\$1").replace(/(n)/g, "\n").replace(/(r)/g, "\r").replace(/(t)/g, "\t") """;
                                                                                                   )
                                                                                                     ​"{" r .join () "}"; r.push(this.Obj2str( o[i]))
                                                                                                                                                                                            ":/g, '":""');
},
    getJSON: function ()
    {
        ///
        /// 转换成JSON字符串
        ///

        ///
        ///

        //内部方法,用于递归
        var me = this;
        var getChild = function (node)
        {
            var str = "";
            str += "{\"Key\":\"" + node.Key + "\",\"Value\":" + me.Obj2str(node.Value);
            if (node.next != null)
                str += ",\"next\":" + getChild(node.next);
            else
                str += ",\"next\":\"null\"";
            str += "}";
            return str;
        };
        var link = "{\"root\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":";
        if (this.count == 0)//如果空表
        {
            return "{\"root\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":\"null\"},\"end\":{\"Key\":\"null\",\"Value\":\"null\",\"next\":\"null\"},\"count\":\"0\"}";
        }
        link += getChild(this.root.next) + "}";
        //加上end
        link += ",\"end\":{\"Key\":\"" + this.end.Key + "\",\"Value\":" + me.Obj2str(this.end.Value) + ",\"next\":\"null\"";
        link += "},\"count\":\"" + this.count + "\"}";
        return link;
    },
    getArrayJSON: function ()
    {
        ///
        /// 转所有节点的value换成JSON字符串,数组格式
        ///

        ///
        ///

        var link = "{\"link\":[";
        var i = this.root;
        while (Boolean(i = i.next))
        {
            link += this.Obj2str(i.Value) + ",";
        }
        link = link.substr(0, link.length - 1);
        link += "]}";
        return link;
    },
    sort: function (fn)
    {
        ///
        /// 对链表进行排序
        ///

        ///
        /// 比较两个链表元素大小的方法,当返回真时,此方法的参数所指的节点将往下沉
        ///
        if (fn != null)
        {

            var i = this.root;
            while (Boolean(i = i.next))
            {
                var j = this.root;
                while (Boolean(j = j.next))
                {
                    if (j.next != null)
                    {
                        if (fn.call(this, j))
                        {
                            var Key = j.Key;
                            var Value = j.Value;
                            j.Key = j.next.Key;
                            j.Value = j.next.Value;
                            j.next.Key = Key;
                            j.next.Value = Value;
                        }
                    }
                }
                this.end = i;
            }

        }
        else
        {

        }
    }
};

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn