JavaScriptでチェーン操作を実現
1298 ワード
TL;DR
チェーンをもう一つのチェーンの最後に連結します.シリーズの目次は前文と目次に会ってください.
需要
一つの
再帰版
ループの考え方は、
Codewars Kata GitHubのコードはGitHubのテストを実現します.
チェーンをもう一つのチェーンの最後に連結します.シリーズの目次は前文と目次に会ってください.
需要
一つの
append()
関数を実現して、二つのチェーンテーブルを連結して、接続後のチェーンブロックのノードを返します.var listA = 1 -> 2 -> 3 -> null
var listB = 4 -> 5 -> 6 -> null
append(listA, listB) === 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null
二つのチェーンが全部null
ならnull
に戻り、そのうちの一つがnull
なら別のチェーンに戻ります.再帰版
append
自体は、再帰的論理として機能することができる.append(listA, listB)
は、実際にはlistA.next = append(listA.next, listB)
に等しく、listA
が最後のnull
に戻るまでは、append(null, listB)
は直接listB
に戻れば良い.境界条件の判断を加えると、コードは以下の通りです.function append(listA, listB) {
if (!listA) return listB
if (!listB) return listA
listA.next = append(listA.next, listB)
return listA
}
サイクルバージョンループの考え方は、
listA
およびlistB
がいずれも空でない場合、listA
のエンドノードを先に見つけて、node
と仮定して、node.next = listB
であればいいということである.コードは以下の通りですfunction appendV2(listA, listB) {
if (!listA) return listB
if (!listB) return listA
let node = listA
while (node.next) node = node.next
node.next = listB
return listA
}
参考資料Codewars Kata GitHubのコードはGitHubのテストを実現します.