> 웹 프론트엔드 > 프런트엔드 Q&A > 자바스크립트에 연결리스트가 있나요?

자바스크립트에 연결리스트가 있나요?

WBOY
풀어 주다: 2022-06-15 16:05:51
원래의
1713명이 탐색했습니다.

JavaScript에는 연결 목록이 없습니다. 연결 목록은 여러 요소로 구성된 목록을 의미하며, 요소는 연속적으로 저장되지 않고 다음 포인터와 함께 연결됩니다. 연결된 목록의 경우 요소를 이동할 필요가 없으며 다음 포인터만 변경하면 됩니다. 개체는 JavaScript에서 연결된 목록을 시뮬레이션하는 데 사용할 수 있습니다.

자바스크립트에 연결리스트가 있나요?

이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

자바스크립트에는 연결리스트가 있나요

자바스크립트에는 연결리스트가 없습니다

연결리스트란 무엇인가요?

자바스크립트에 연결리스트가 있나요?

연결된 목록은 여러 요소로 구성된 목록입니다.

요소는 불연속적으로 저장되며 다음 포인터와 함께 연결됩니다.

JS에는 연결 목록이 없지만 개체를 ​​사용하여 연결 목록을 시뮬레이션할 수 있습니다

공통 작업

새 노드 APPEND除 노드 삭제 Remove

노드 삽입 삽입

인덱스 인덱스 가져오기

연결 테이블 문자열 tostring

연결 목록 길이 크기 가져오기 요소가 아닌 경우 요소를 이동해야 하는 경우가 많습니다. -머리 및 꼬리 요소

링크된 목록: 머리 및 꼬리가 아닌 요소를 추가하거나 삭제할 수 없습니다. 다음 요소의 방향만 변경하면 됩니다.

예제는 다음과 같습니다.

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 비디오 튜토리얼, 웹 프론트엔드

위 내용은 자바스크립트에 연결리스트가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿