[Data Structures] LinkedList
์์ฆ ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ๋ฅผ ์ค๋นํ๋ค ๋ณด๋ฉด ๊ฐํน๊ฐ๋ค ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ง์์ด ์์ด์ผ ํ ์ ์๋ ๋ฌธ์ ๋ค์ด ๋์ฌ ๋๊ฐ ์๋ค.
๋ฌผ๋ก ํ๋ถ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ์์ง๋ง ๊ทธ ๋๋ C์ธ์ด๋ก ๊ตฌํํ๋ ๊ฒ ์ฃผ๋ ๊ณผ์ ์๊ณ ์ง๊ธ์ Swift๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Swift๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌ ํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ์์ ์์ํ ์๋ฃ๊ตฌ์กฐ ๊ณต๋ถ..
์ค๋์ LinkedList ๋ถํฐ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค.
LinkedList
LinkedList๋ ๊ฐ๋ค์ด ํ ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋ collection์ด๋ค. ๋ชจ์์ผ๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์ ์ด๋ฏธ์ง์์ ๋ณด๋ฏ ๋๊ทธ๋ ์นธ ์์ ์ซ์๊ฐ ์๊ณ ํ์ดํ๋ก ์ฐ๊ฒฐ์ด ๋์ด์๋๋ฐ, ์ด๊ฒ์ Node ๋ค์ด ์ฐ๊ฒฐ ๋ผ์๋ค๊ณ ๋งํ๋ค.
Node
linked list์์ ์ฌ์ฉํ๋ Node๋ ๋๊ฐ์ง๋ฅผ ๋ด๋นํ๋ค.
- ๊ฐ ์ ์ฅ
- ๋ค์ ๋ ธ๋์ ๋ํ reference ์ ์ฅ. (list์ ๋ง์ง๋ง node๋ ๋ค์ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก nil์ด ์ ์ฅ๋๋ค.)
์ด ๋ ธ๋๋ฅผ ์ฝ๋๋ก ๊ตฌํํด๋ณด์. ์ฐ์ ๋ ธ๋๊ฐ ํ ์ผ์ธ ์์ ๋ ๊ฐ์ง๋ฅผ ํฌํจํด์ผํ๋ค.
class Node<T> {
var value: T
var next: Node?
init(value: T, next: Node? = nil) {
self.value = value
self.next = next
}
}
Node ํด๋์ค๋ ์ด๋ค ๊ฐ๋ ๋ฃ์ ์ ์๋๋ก ์ ๋ค๋ฆญ์ผ๋ก ์ ์ธํ๋ค.
์ฒ์ ํด๋์ค ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ node์ ๊ฐ๊ณผ ๋ค์ node๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํ๋ค.
๊ทธ๋ผ ์๊ฑธ ๊ฐ์ง๊ณ Node๋ฅผ ๋ง๋ค์ด ์ฐ๊ฒฐ์ ํด๋ณด๋ฉด
print๋ก node1์ ์ฐ์ด๋ดค์ ๋ ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. (์ถ๋ ฅ ๋ฉ์๋๋ ๊นํ์์ ํ์ธ ๊ฐ๋ฅํ๋ค.)
LinkedList
์ด๋ฒ์ ๋ ธ๋๋ฅผ ๊ฐ์ง๊ณ ์ง์ง ๋งํฌ๋๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณด์. (๋ ธ๋๋ง ๊ฐ์ง๊ณ ๋ ํ๋ํ๋ ๋ ธ๋๋ฅผ ์ ์ธํ๊ณ ๊ทธ๊ฒ๋ค์ ์์๋๋ก next์ ํ ๋นํด์ค์ผํ๋ ๊ท์ฐฎ์์ด ์์ผ๋ฏ๋ก ๋งํฌ๋๋ฆฌ์คํธ์์๋ ์ฝ์ ๊ณผ ์ ๊ฑฐ๋ฅผ ๋ด๋นํ๋ ๋ฉ์๋๋ ๊ตฌํํด์ผ ํ๋ค.)
๋งํฌ๋๋ฆฌ์คํธ์์ ํ์ํ ๊ฒ์ ์๊ฐํด๋ณด๋ฉด ์๋ ์ ๋๊ฐ ์๊ฐ์ด ๋๋ค. ์ฐจ๊ทผ์ฐจ๊ทผ ์ ๋ฆฌ๋ฅผ ํด๋ณด์.
- head (๋งํฌ๋๋ฆฌ์คํธ์ ์ฒซ ๋ ธ๋)
- tail (๋งํฌ๋๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋)
- ์ฝ์
- ์ ๊ฑฐ
struct LinkedList<T> {
var head: Node<T>?
var tail: Node<T>?
init() {}
var isEmpty: Bool { return head == nil }
}
์ฐ์ ์ head์ tail ๋ ธ๋๋ฅผ ์ ์ฅํ ์ ์๋ LinkList ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์๋ค. ๋ค์ ํฌ์คํ ์์ ์ฝ์ , ๊ทธ ๋ค์ ํฌ์คํ ์์ ์ ๊ฑฐ๋ฅผ ์ ๋ฆฌํ๋ค.
Leave a comment