[Golang]アルゴリズム改善 ~LinkedListを自作しよう!~

こんにちは。KOUKIです。

とあるWeb系企業で、Goエンジニアをやっています。

今回は、LinkedListを自作してみたので、紹介します。

LinkedListについて

下記の画像を見てください。

A * B * C * D はそれぞれ、データのNodeを表しており、Prev, Next, Value(Aとか)を持っています。

それぞれLinkで繋がっており、このLinkを伝って各Nodeにアクセスできる、そんなコードを実装したいと思います。

Listパッケージを使えば?

実は、Go言語の組み込みパッケージであるlistパッケージを使えば、プログラムを自作する必要はありません。

しかし、アルゴリズムを学ぶことは綺麗なコードを書くことにつながるので、自力で実装できるようにしておいた方がいいと思います^^

実装

早速、実装しましょう。

モデルの定義

必要なモデルは、LinkedListとNodeですね。

Nodeは先程の例で言うならA/B/C/Dです。LinkedListはNodeを繋げるために存在します。

Node – Next/Prevメソッド

Nodeのメソッドとして、Next/Prevを実装しましょう。

LinkedList – First/Last/Pushメソッド

LinkedListのメソッドとして、First/Last/Pushを実装しましょう。

Pushが難しいかもしれませんね。

一番最初にNodeを追加した時は、当然headは空です。そのため、headにNodeを追加します。また、末尾(tail)もそのNodeにします

2番目以降のNodeは、前回追加したNodeのtailのnextがそのNodeになるわけですから「l.tail.next」に格納します。そして、そのNodeのPrevは当然前回追加したNodeを指す必要があるので「node.prev」に前回作成したNodeを示す「l.tail」を追加しているわけです。

検証

main関数を追加して、挙動を確認しましょう。

完璧ですね!

おわりに

いかがでしょうか?

自分で綺麗なアルゴリズムを実装できるようになると、一段階上のエンジニアになれると思いませんか?

絶対に無駄にならないと思うので、ぜひチャレンジしてみてください!

それでは、また!

Go記事まとめ

アルゴリズムまとめ

Go記事をまとめます。

ソースコード

コメントを残す