ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptにリンクリストはありますか?

JavaScriptにリンクリストはありますか?

WBOY
WBOYオリジナル
2022-06-15 16:05:511662ブラウズ

JavaScriptにはリンクリストは存在しません。リンクリストとは複数の要素から構成されるリストのことを指します。要素は連続して格納されるのではなく、ネクストポインタでつながっています。そのため、先頭以外の要素を追加または削除する場合は、リンク リストの末尾要素の場合、要素を移動する必要はなく、次の要素を変更するだけで済みます。JavaScript では、オブジェクトを使用してリンク リストをシミュレートできます。

JavaScriptにリンクリストはありますか?

このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript にはリンク リストはありますか?

JavaScript にはリンク リストはありません

リンク リストとは何ですか?

JavaScriptにリンクリストはありますか?

#リンクリストは複数の要素から構成されるリストです。

要素は連続して格納されるのではなく、次のポインタでつながっています

JS にはリンク リストはありませんが、オブジェクトを使用してリンク リストをシミュレートできます

#共通操作

ノード追加追加

ノード削除remove

ノード挿入insert

インデックスindexOf

リンク リストを文字列 toString に変換

リンク リストの長さを取得size

リンクリストが空かどうかの判定 isEmpty

Array VS Linked List

Array: 先頭要素と末尾要素以外の要素を追加または削除する場合、多くの場合、要素を移動する必要があります。

リンクされたリスト: 先頭要素と末尾要素以外の要素を追加または削除する場合、要素を移動することはできません。必要なのは次のポインタを変更することだけです。

#例は次のとおりです:

JavaScript にはリンク リストの直接実装がありません。以下は私自身のリンク リストの簡単な実装です

function LinkedList(){
    var Node = function(element){
        this.element = element;
        this.next = null;
    }
    var head = null;
    var length = 0;
    // 定义append方法
    this.append = function(element){
        var node = new Node(element),
        current;
        // 当head为空时,就将新增的node作为head
        if(head === null){
            head = node
        }else{
            // 当head不为空时,将head赋值为当前值,通过判断当前值的next值是否存在遍历整个链表
            current = head;
            while(current.next){
                current = current.next;
            }
            // 遍历到链表的最后一项时,设置最后一项的next为新增的内容
            current.next = node
        }
        // 每新增一项,length都加1操作
        length++;
    }
    // 定义toString方法
    this.toString = function(){
        var string = '',
        current = head;
        // 最初将当前值定位到头部,当current存在时,将current的值添加到需要返回的string中,之后将current取为链表下一个值
        while(current){
            string += current.element + ( current.next ? ',' : '');
            current = current.next
        }
        // 遍历完整个链表之后返回string
        return string;
    }
    this.removeAt = function(position){
        // 当指定的位置没有在链表的长度范围内时直接返回null
        if(position > -1 && position < length){
            var current = head,
            index = 0,
            previous;
            // 指定为值是第一个时就将head移到下一个位置
            if(position === 0){
                head = current.next
            }else{
                // 通过遍历的方式将current移动到指定位置,使用index记录移动的距离
                while(index < position){
                    previous = current;
                    current = current.next;
                    index++;
                }
                // 删除是通过将指定位置的上一个节点的next指向指定位置的下一个节点
                previous.next = current.next
            }
            // 一旦删除成功需要将长度减一并返回删除的值
            length--;
            return current.element;
        }
        return null;
    }
    // 实现插入功能
    this.insert = function(position,element){
        // 插入的位置不在链表范围内时返回false
        if(position > -1 && position <= length){
            var current = head,
            index = 0,
            node = new Node(element),
            previous;
            // 插入内容在头部时将插入的node的next指定为current,current此时为head,然后将head指定为插入的node
            if(position === 0){
                node.next = current;
                head = node;
            }else{
                // 通过遍历的方式将指针指定到插入的位置,index记录当前移动的位置
                while(index < position){
                    previous = current;
                    current = current.next
                    index++
                }
                // 插入元素通过将插入位置的上一个元素的next指向插入的节点,并将插入的节点的next指向当前节点
                previous.next = node;
                node.next = current;
            }
            // 插入成功之后length加1
            length++;
            return true;
        }
        return false
    }
    // 实现查找指定element的index的功能
    this.indexOf = function(element){
        var index = 0,
        current = head;
        // 通过遍历的方式寻找指定元素所在的位置.
        // 当前节点存在时,判断当前节点的element是否为需要寻找的element,如果是就返回此时的index,如果不是就继续向下遍历节点
        // 当存在两个相同内容时只会返回第一个index
        while(current){
            if(current.element === element){
                return index;
            }
            current = current.next;
            index++;
        }
        return -1;
    }
}

実装後は、次の手順を実行します。呼び出し:

var linkedList = new LinkedList();
linkedList.append(15);
linkedList.append(10);
linkedList.insert(1,2) // true
linkedList.insert(2,2) // true
linkedList.toString() // "15,2,2,10"
linkedList.removeAt(3) // 10
linkedList.toString() // "15,2,2"
linkedList.indexOf(2) // 1

[関連する推奨事項:

JavaScript ビデオ チュートリアル

Web フロントエンド ]

以上がJavaScriptにリンクリストはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。