91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript實現雙向鏈表的方法

發布時間:2020-10-16 15:17:12 來源:億速云 閱讀:139 作者:小新 欄目:web開發

小編給大家分享一下JavaScript實現雙向鏈表的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

什么是雙向鏈表?

在雙向鏈表中,每個節點都有對前一個節點和下一個節點的引用。上一個和下一個的開始和結束節點應該指向null。

JavaScript實現雙向鏈表的方法

雙向鏈表的實現

我們使用的是es6類,在下面的代碼中,我們創建了一個輔助類Node,其中包含三個屬性data,prev,next。

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:列表中的最后一個節點。

length:列表中有多少節點?

讓我們將這些功能添加到我們的雙向鏈表中

Push方法

Push方法幫助我們在鏈表的末尾添加新節點。

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.如果已經有節點

new node.prev屬性應該是this.tail

this.tail.next應該是一個新節點

更新tail。

4.將長度增加1。

pop方法

幫助我們從列表中刪除最后一個節點。

在雙向鏈表中,很容易從列表中刪除最后一個節點,因為在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.如果找到前一個節點。

刪除最后一個節點

更新tail。

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實現雙向鏈表的方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南漳县| 永清县| 贵德县| 成武县| 饶平县| 景谷| 梁河县| 永登县| 南投县| 礼泉县| 镶黄旗| 泾川县| 潍坊市| 福鼎市| 彭水| 泸溪县| 乌兰浩特市| 肇州县| 宣恩县| 高陵县| 兰坪| 平湖市| 井冈山市| 天峨县| 桂平市| 徐闻县| 鹤壁市| 三门峡市| 台山市| 浏阳市| 响水县| 阜新市| 西宁市| 平昌县| 瑞金市| 长春市| 达孜县| 巨野县| 宜兰县| 姜堰市| 水城县|