js鏈表的flag,js 鏈表

本文目錄一覽:

js數組和鏈表的區別

首先從邏輯結構上說,兩者都是數據結構的一種,但存在區別,數組是申請的一塊連續的內存空間,並且是在編譯階段就要確定空間大小的,同時在運行階段是不允許改變的,所以它不能夠隨着需要的改變而增加或減少空間大小,所以當數據量大的時候,有可能超出了已申請好的數組上限,產生數據越界,或者是數據量很小,對於沒有使用的數組空間,造成內存浪費。鏈表則是動態申請的內存空間,並不像數組一樣需要事先申請好大小,鏈表是現用現申請就OK,根據需求動態的申請或刪除內存空間,對於的是增加或刪除數據,所以比數組要靈活。再從物理存儲即內存分配上分析,數組是連續的內存,對於訪問數據,可以通過下標直接讀取,時間複雜度為O(1),而添加刪除數據就比較麻煩,需要移動操作數所在位置後的所有數據,時間複雜度為O(N)。鏈表是物理上非連續的內存空間,對於訪問數據,需要從頭便利整個鏈表直到找到要訪問的數據,沒有數組有效,但是在添加和刪除數據方面,只需要知道操作位置的指針,很方便可以實現增刪,教數組比較靈活有效率。所以綜合以上,對於快速訪問數據,不經常有添加刪除操作的時候選擇數組實現,而對於經常添加刪除數據,對於訪問沒有很高要求的時候選擇鏈表。

【JS算法】 刪除鏈表中某個節點

先來了解一個基礎知識

b=a,但改變 b,並不會影響 a

y=x , 但改變y,會影響x,因為class有原型鏈

1=2=3,鏈表是由一組節點組成的集合。每個節點都使用一個對象的引用指向它的後繼,指向另一個節點的引用叫做鏈

給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val == val 的節點,並返回 新的頭節點 。

輸入:head = [1,2,6,3,4,5,6] val = 6

輸出:[1,2,3,4,5]

JS中 數組與鏈表

常規數組: 數組元素內容是一種類型的元素,如const arr = [1,2,3,4],在存儲空間是連續內存的

JS數組: 數組元素內容不是同一種類型的元素,如const arr = [‘haha’, 1, {a:1}],則在存儲上是一段非連續空間。此時,JS 數組不再具有數組的特徵,其底層其實是由鏈表來實現的

總結

鏈表的插入/刪除效率較高,而訪問效率較低;

數組的訪問效率較高,而插入效率較低

js鏈表怎麼去輸入啊

//Node表示要加入列表的項

var Node=function(element){

this.element=element;

this.next=null;

};

var length=0;//存儲列表項的數量

var head=null;//head存儲的是第一個節點的引用

//向鏈表尾部追加元素

this.append=function(element){

var node=new Node(element),

current;

if(head===null){

head=node;

 }else{

current=node;

while(current.next){

current=current.next;

}

current.next=node;

}

length++;

};

//在鏈表的任意位置插入元素

this.insert=function(position,element){

if(position=0position=length){

var node=new Node(element),

current=head,

previous,

index=0;

if(position===0){

node.next=current;

head=node;

}else{

while(indexposition){

previous=current;

previous.next=node;

index++;

}

node.next=current;

previous.next=node;

}

length++;

return true;

}else{

return false;

}

};

//從鏈表中移除元素

this.removeAt=function(position){

if(position-1  positionlength){

var current=head,

previous,

index=0;

if(position===0){

head=current.next;

}else{

while(indexposition){

previous=current;

current=current.next;

index++;

}

previous.next=current.next;

}

length–;

return current.element;

}else{

return null;

}

};

//返回元素在鏈表中的位置

this.indexOf=function(element){

var current=head,

index=-1;

while(current){

if(element===current.element){

return index;

}

index++;

current=current.next;

}

return -1;

};

//移除某個元素

this.remove=function(element){

var index=this.indexOf(element);

return this.removeAt(index);

};

//判斷鏈表是否為空

this.isEmpty=function(){

return length===0;

};

//返回鏈表的長度

this.size=function(){

return length;

};

//把LinkedList對象轉換成一個字符串

this.toString=function(){

var current=head,

string=””;

while(current){

string=current.element;

current=current.next;

}

return string;

};

};

var list=new LinkedList();

list.append(15);

list.append(10);

list.insert(1,11);

list.removeAt(2)

console.log(list.size());

鏈表(帶頭結點)基本操作實驗

單鏈表的刪除操作是指刪除第i個結點,返回被刪除結點的值。刪除操作也需要從頭引用開始遍歷單鏈表,直到找到第i個位置的結點。如果i為1,則要刪除第一個結點,則需要把該結點的直接後繼結點的地址賦給頭引用。對於其它結點,由於要刪除結點,所以在遍歷過程中需要保存被遍歷到的結點的直接前驅,找到第i個結點後,把該結點的直接後繼作為該結點的直接前驅的直接後繼。刪除操作如圖

單鏈表的刪除操作示意圖

刪除操作的算法實現如下:

public T Delete(int i)

{

if (IsEmpty()|| i 0)

{

Console.WriteLine(“Link is empty or Position is error!”);

return default(T);

}

Node q = new Node();

if (i == 1)

{

q = head;

head = head.Next;

return q.Data;

}

Node p = head;

int j = 1;

while (p.Next != null j i)

{

++j;

q = p;

p = p.Next;

}

if (j == i)

{

q.Next = p.Next;

return p.Data;

}

else

{

Console.WriteLine(“The ith node is not exist!”);

return default(T);

}

}

算法的時間複雜度分析:單鏈表上的刪除操作與插入操作一樣,時間主要消耗在結點的遍歷上。如果表為空則不進行遍歷。當表非空時,刪除第i個位置的結點, i等於1遍歷的結點數最少(1個),i等於n遍歷的結點數最多(n個,n為單鏈表的長度),平均遍歷的結點數為n/2。所以,刪除操作的時間複雜度為O(n)。

js 刪除鏈表中重複的節點

題目描述:

給定一個排序的鏈接列表,刪除所有具有重複數字的節點,從原始列表中只留下不同的數字。

例如, 給定1- 2- 3- 3- 4- 4- 5,返回1- 2- 5。

給定1- 1- 1- 2- 3,返回2- 3。

JavaScript 版數據結構與算法(三)鏈表

可以看出JavaScript中的鏈表是通過不斷 new 出來節點,並在節點的next屬性上繼續 new 創建出來的

結構大概長這樣:

參考資料:

原創文章,作者:RAHEU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/324536.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RAHEU的頭像RAHEU
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 利用Python實現兩個鏈表合併為一個有序鏈表

    對於開發工程師來說,實現兩個鏈表合併為一個有序鏈表是必須掌握的技能之一。Python語言在鏈表處理上非常便利,本文將從多個方面詳細闡述如何利用Python實現兩個鏈表合併為一個有序…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字符無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿着SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿着SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 相交鏈表求節點

    相交鏈表求節點是一個常見的鏈表問題,涉及到判斷兩個鏈表是否相交以及找到相交部分的節點。本文將從鏈表的常見問題、判定相交鏈表、求解相交節點三個方面進行詳細闡述。 一、鏈表的常見問題 …

    編程 2025-04-27
  • Python獲取單鏈表長度的方法

    本文將從以下幾個方面詳細闡述Python中獲取單鏈表長度的方法,並為每個方面提供詳細的代碼示例。 一、定義鏈表 在Python中,我們可以使用類來定義鏈表。具體實現如下: clas…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27

發表回復

登錄後才能評論