>  기사  >  웹 프론트엔드  >  JavaScript는 이중 연결 목록을 구현합니다(코드 예).

JavaScript는 이중 연결 목록을 구현합니다(코드 예).

藏色散人
藏色散人원래의
2019-04-12 10:50:031955검색

이 기사에서는 JavaScript로 이중 연결 목록을 구현하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

이중 연결 목록이란 무엇인가요?

이중 연결 목록에서 각 노드는 이전 노드와 다음 노드에 대한 참조를 갖습니다. 이전 및 다음 시작 및 끝 노드는 null을 가리켜야 합니다.

JavaScript는 이중 연결 목록을 구현합니다(코드 예).

이중 연결 목록 구현

다음 코드에서는 prev, next라는 세 가지 속성 데이터가 포함된 보조 클래스 Node를 만듭니다.

class Node {

  constructor(data){
    this.data = data; // data
    this.prev = null; // 引用prev节点
    this.next = null; // 引用next节点
  }}

data: 노드에 추가해야 하는 데이터입니다.

prev: 이전 노드를 참조합니다.

next: 다음 노드를 나타냅니다.

주요 알고리즘이 시작됩니다

class DoublyLinkedList{

   constructor(){
        this.head = null;
        this.tail = null;
        this.length = null;
  }}

위 코드에서는 head, tail 및 length의 세 가지 속성을 가진 DoublyLinkedList 클래스를 만들었습니다.

head: 목록의 첫 번째 노드입니다.

tail: 목록의 마지막 노드입니다.

길이: 목록에 노드가 몇 개 있습니까?

이중 연결 목록에 이러한 기능을 추가해 보겠습니다.

푸시 방법

푸시 방법을 사용하면 연결 목록 끝에 새 노드를 추가할 수 있습니다.

push(data){

    const node = new Node(data);

    if(!this.head){
      this.head = node;
      this.tail = node;
    }else{
      node.prev = this.tail;
      this.tail.next = node;
      this.tail = node;

    }

    this.length++;
  }

1. 위 코드에서는 먼저 새 변수를 선언하고 노드 생성자를 호출합니다.

2. this.head가 없으면 this.head와 this.tail이 1단계에서 만든 새 노드가 됩니다.

3. 이미 노드가 있는 경우

새 node.prev 속성은 this.tail

이어야 합니다. this.tail.next는 새 node

업데이트 tail이어야 합니다.

4. 길이를 1씩 늘립니다.

팝 방식

을 사용하면 목록에서 마지막 노드를 제거할 수 있습니다.

이중 연결 목록에서는 tail 속성에 이전 노드에 대한 참조가 있으므로 목록에서 마지막 노드를 쉽게 제거할 수 있습니다.

pop(){

    if(!this.head) return null

    // tail是最后一个节点,因此我们从tail中提取prev属性
    const prevNode = this.tail.prev    
    if(prevNode){
       prevNode.next = null;
       this.tail = prevNode; // 更新tail
    }else{
      // 如果prev属性为null,则表示只有一个节点
      this.head = null;
      this.tail = null;
    }
     this.length--; 
  }

1. 위 코드에서는 먼저 새 변수를 선언하고 tail의 이전 속성을 저장합니다.

2. 이전 노드를 찾은 경우.

마지막 노드 삭제

꼬리 업데이트.

3. 이전 노드가 비어 있으면 노드가 하나만 있다는 의미입니다.

This.head와 this.tail은 null이어야 합니다.

4. 길이를 1씩 줄입니다.

insertBeginning

insertBeginning 메소드는 목록의 시작 부분에 새 노드를 삽입하는 데 도움이 됩니다.

insertBeginning(data){

    // 创建新节点
    const node = new Node(data);

    // 如果没有节点
    if(!this.head) {
      this.head = node;
      this.tail = node;
    }else{
      this.head.prev = node
      node.next = this.head;
      this.head = node;
    }
    // 增加长度
    this.length++;

  }

removeFirst 메서드

removeFirst 메서드는 연결 목록에서 첫 번째 노드를 삭제하는 데 도움이 됩니다.

removeFirst(){

    if(!this.head) return null

    // 存储第二个节点
    const node = this.head.next;

    if(node){
     // 删除前一个节点
      node.prev = null
     // 更新head
      this.head = node    
      }else{
      // 只有一个节点,所以我们将head和tail更新为null
      this.head = null
      this.tail = null
    }
     this.length--;

  }

관련 추천: "javascript tutorial"

위 내용은 JavaScript는 이중 연결 목록을 구현합니다(코드 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.