摘要:計算鏈表的長度和指定元素的重復(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) === 4length 遞歸版本
遞歸是最有表達力的版本。思路非常簡單。每個鏈表的長度 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
for 和 while 在任何情況下都是可以互換的。我們可以用 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
摘要:寫兩個幫助函數(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 來表示鏈表,...
摘要:獲得鏈表的第個節(jié)點。需求實現(xiàn)一個方法,傳入一個鏈表和一個索引,返回索引代表的節(jié)點。遞歸版本假設(shè)函數(shù)定義為,遞歸過程為當(dāng)為零,直接返回該節(jié)點,否則遞歸調(diào)用。如果循環(huán)結(jié)束還沒有查到節(jié)點,那肯定是鏈表或者索引不合法,直接拋異常即可。 TL;DR 獲得鏈表的第 N 個節(jié)點。系列目錄見 前言和目錄 。 需求 實現(xiàn)一個 getNth() 方法,傳入一個鏈表和一個索引,返回索引代表的節(jié)點。索引以 0...
摘要:計算機科學(xué)中最常見的兩種數(shù)據(jù)結(jié)構(gòu)是單鏈表和雙鏈表。雙向鏈表雙向鏈表具有單鏈表的所有功能,并將其擴展為在鏈表中可以進行雙向遍歷。雙向鏈表的操作我們的鏈表將包括兩個構(gòu)造函數(shù)和。與單鏈表不同,雙向鏈表包含對鏈表開頭和結(jié)尾節(jié)點的引用。 翻譯:瘋狂的技術(shù)宅英文:https://code.tutsplus.com/art...說明:本文翻譯自系列文章《Data Structures With Ja...
想必大家都能看得懂的源碼 ahooks 整體架構(gòu)篇,且可以使用插件化機制優(yōu)雅的封裝你的請求hook,現(xiàn)在我們就探討下ahooks 是怎么解決 React 的閉包問題的?。 React 的閉包問題 先來看一個例子: importReact,{useState,useEffect}from"react"; exportdefault()=>{ const[c...
摘要:繼承于,實現(xiàn)了接口。的定義的定義從中,我們可以看出和都實現(xiàn)了接口。指向的的總的大小是迭代器還是枚舉類的標志為,表示它是迭代器否則,是枚舉類。默認加載因子指定容量大小的構(gòu)造函數(shù)當(dāng)?shù)膶嶋H容量閾值時,閾值總的容量加載因子,就將的容量翻倍。 概要 學(xué)完了Map的全部內(nèi)容,我們再回頭開開Map的框架圖。showImg(https://segmentfault.com/img/remote/146...
閱讀 535·2019-08-30 15:55
閱讀 944·2019-08-29 15:35
閱讀 1199·2019-08-29 13:48
閱讀 1910·2019-08-26 13:29
閱讀 2933·2019-08-23 18:26
閱讀 1237·2019-08-23 18:20
閱讀 2834·2019-08-23 16:43
閱讀 2710·2019-08-23 15:58