国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Batkid / 1017人閱讀

摘要:計算鏈表的長度和指定元素的重復(fù)次數(shù)。需求實現(xiàn)一個函數(shù)來計算鏈表的長度。遞歸版本遞歸是最有表達力的版本。注意因為要在外部作為返回值使用,我們只能用而不是聲明變量。參考資料的代碼實現(xiàn)的測試

TL;DR

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

需求

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

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

實現(xiàn)一個 count() 函數(shù)來計算指定數(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 遞歸版本

遞歸是最有表達力的版本。思路非常簡單。每個鏈表的長度 length(head) 都等于 1 + length(head.next) 。空鏈表長度為 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)外維護一個變量,每次自增 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é)點后移的操作都放到一起,簡化一下代碼量。注意因為 len 要在 for 外部作為返回值使用,我們只能用 var 而不是 let/const 聲明變量。

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

length 思路類似,區(qū)別只是遞歸時判斷一下節(jié)點數(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 的代碼實現(xiàn)
GitHub 的測試

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    yzzz 評論0 收藏0

發(fā)表評論

0條評論

Batkid

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<