成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

用 JavaScript 實(shí)現(xiàn)鏈表操作 - 02 Length & Count

Batkid / 1098人閱讀

摘要:計(jì)算鏈表的長度和指定元素的重復(fù)次數(shù)。需求實(shí)現(xiàn)一個(gè)函數(shù)來計(jì)算鏈表的長度。遞歸版本遞歸是最有表達(dá)力的版本。注意因?yàn)橐谕獠孔鳛榉祷刂凳褂?,我們只能用而不是聲明變量。參考資料的代碼實(shí)現(xiàn)的測試

TL;DR

計(jì)算鏈表的長度和指定元素的重復(fù)次數(shù)。系列目錄見 前言和目錄 。

需求

實(shí)現(xiàn)一個(gè) length() 函數(shù)來計(jì)算鏈表的長度。

length(null) === 0
length(1 -> 2 -> 3 -> null) === 3

實(shí)現(xiàn)一個(gè) count() 函數(shù)來計(jì)算指定數(shù)字在鏈表中的重復(fù)次數(shù)。

count(null, 1) === 0
count(1 -> 2 -> 3 -> null, 1) === 1
count(1 -> 1 -> 1 -> 2 -> 2 -> 2 -> 2 -> 3 -> 3 -> null, 2) === 4
length 遞歸版本

遞歸是最有表達(dá)力的版本。思路非常簡單。每個(gè)鏈表的長度 length(head) 都等于 1 + length(head.next) ??真湵黹L度為 0 。

function length(head) {
  return head ? 1 + length(head.next) : 0
}
循環(huán)版本 - while

鏈表循環(huán)第一反應(yīng)是用 while (node) { node = node.next } 來做,循環(huán)外維護(hù)一個(gè)變量,每次自增 1 即可。

function lengthV2(head) {
  let len = 0
  let node = head

  while (node) {
    len++
    node = node.next
  }

  return len
}
循環(huán)版本 - for

forwhile 在任何情況下都是可以互換的。我們可以用 for 循環(huán)把變量初始化,節(jié)點(diǎn)后移的操作都放到一起,簡化一下代碼量。注意因?yàn)?len 要在 for 外部作為返回值使用,我們只能用 var 而不是 let/const 聲明變量。

function lengthV3(head) {
  for (var len = 0, node = head; node; node = node.next) len++
  return len
}
count 遞歸版本

length 思路類似,區(qū)別只是遞歸時(shí)判斷一下節(jié)點(diǎn)數(shù)據(jù)。

function count(head, data) {
  if (!head) return 0
  return (head.data === data ? 1 : 0) + count(head.next, data)
}
循環(huán)版本

這里我直接演示的 for 版本,思路類似就不多說了。

function countV2(head, data) {
  for (var n = 0, node = head; node; node = node.next) {
    if (node.data === data) n++
  }
  return n
}
參考資料

Codewars Kata
GitHub 的代碼實(shí)現(xiàn)
GitHub 的測試

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/91243.html

相關(guān)文章

  • JavaScript 實(shí)現(xiàn)鏈表操作 - 01 Push & Build List

    摘要:寫兩個(gè)幫助函數(shù)來創(chuàng)建鏈表。用于把一個(gè)節(jié)點(diǎn)插入到鏈表的頭部。這個(gè)方法應(yīng)該始終返回一個(gè)新的鏈表。接收一個(gè)數(shù)組為參數(shù),創(chuàng)建對應(yīng)的鏈表。參考資料的代碼實(shí)現(xiàn)的測試 TL;DR 寫兩個(gè)幫助函數(shù)來創(chuàng)建鏈表。系列目錄見 前言和目錄 。 需求 寫兩個(gè)方法 push 和 buildList 來初始化鏈表。嘗試在 buildList 中使用 push 。下面的例子中我用 a -> b -> c 來表示鏈表,...

    Scorpion 評論0 收藏0
  • JavaScript 實(shí)現(xiàn)鏈表操作 - 03 Get Nth Node

    摘要:獲得鏈表的第個(gè)節(jié)點(diǎn)。需求實(shí)現(xiàn)一個(gè)方法,傳入一個(gè)鏈表和一個(gè)索引,返回索引代表的節(jié)點(diǎn)。遞歸版本假設(shè)函數(shù)定義為,遞歸過程為當(dāng)為零,直接返回該節(jié)點(diǎn),否則遞歸調(diào)用。如果循環(huán)結(jié)束還沒有查到節(jié)點(diǎn),那肯定是鏈表或者索引不合法,直接拋異常即可。 TL;DR 獲得鏈表的第 N 個(gè)節(jié)點(diǎn)。系列目錄見 前言和目錄 。 需求 實(shí)現(xiàn)一個(gè) getNth() 方法,傳入一個(gè)鏈表和一個(gè)索引,返回索引代表的節(jié)點(diǎn)。索引以 0...

    syoya 評論0 收藏0
  • 【譯】JavaScript數(shù)據(jù)結(jié)構(gòu)(3):單向鏈表與雙向鏈表

    摘要:計(jì)算機(jī)科學(xué)中最常見的兩種數(shù)據(jù)結(jié)構(gòu)是單鏈表和雙鏈表。雙向鏈表雙向鏈表具有單鏈表的所有功能,并將其擴(kuò)展為在鏈表中可以進(jìn)行雙向遍歷。雙向鏈表的操作我們的鏈表將包括兩個(gè)構(gòu)造函數(shù)和。與單鏈表不同,雙向鏈表包含對鏈表開頭和結(jié)尾節(jié)點(diǎn)的引用。 翻譯:瘋狂的技術(shù)宅英文:https://code.tutsplus.com/art...說明:本文翻譯自系列文章《Data Structures With Ja...

    Chiclaim 評論0 收藏0
  • 詳解ahooks解決React閉包問題方法

      想必大家都能看得懂的源碼 ahooks 整體架構(gòu)篇,且可以使用插件化機(jī)制優(yōu)雅的封裝你的請求hook,現(xiàn)在我們就探討下ahooks 是怎么解決 React 的閉包問題的??! eact 的閉包問題  先來看一個(gè)例子:  importReact,{useState,useEffect}from"react";   exportdefault()=>{   const[c...

    3403771864 評論0 收藏0
  • Map總結(jié),看這篇就夠了

    摘要:繼承于,實(shí)現(xiàn)了接口。的定義的定義從中,我們可以看出和都實(shí)現(xiàn)了接口。指向的的總的大小是迭代器還是枚舉類的標(biāo)志為,表示它是迭代器否則,是枚舉類。默認(rèn)加載因子指定容量大小的構(gòu)造函數(shù)當(dāng)?shù)膶?shí)際容量閾值時(shí),閾值總的容量加載因子,就將的容量翻倍。 概要 學(xué)完了Map的全部內(nèi)容,我們再回頭開開Map的框架圖。showImg(https://segmentfault.com/img/remote/146...

    yzzz 評論0 收藏0

發(fā)表評論

0條評論

Batkid

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<