Linked List
โข
์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)๋ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํํ์ ์ ํ ์๋ฃ๊ตฌ์กฐ ์ด๋ค.
โข
์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๋ ๋์ , ๋
ธ๋์ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ ธ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋๋ค.
Linked List์ ํน์ฑ
1.
์์์ ์ญ์ , ์ถ๊ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(1) ๋ก ๋น ๋ฅด๋ค. ๋ฐฐ์ด์ ์์๊ฐ ์ฝ์
๋ฐ ์ญ์ ๋ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ด ์ฌ๋ฐฐ์น๋์ด ์๊ฐ ๋ณต์ก๋๊ฐ O(N) ์ด์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํด๋น ๋
ธ๋๊ฐ์ ์ฐ๊ฒฐ๋ง ์์ ํ๋ ๋ฐฉ์์ผ๋ก ๋น ๋ฅด๋ค.
2.
์ธ๋ฑ์ค๋ฅผ ํตํด ์ค๊ฐ ์์น์ ์ ๊ทผํ ๋ ๋ฐฐ์ด๋ณด๋ค ๋๋ฆฌ๋ค. ๋งํฌ๋๋ฆฌ์คํธ๋ ๋
ธ๋๋ฅผ ์ํํ๋ฉฐ ์ ๊ทผํ์ฌ O(N) ์ด ์์๋๋ค.
Linked List์ ์ข ๋ฅ
โข
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Singly Linked List)
โฆ
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๊ฐ ๋
ธ๋์ ์๋ฃ ๊ณต๊ฐ๊ณผ ํ ๊ฐ์ ํฌ์ธํฐ ๊ณต๊ฐ์ด ์๊ณ , ๊ฐ ๋
ธ๋์ ํฌ์ธํฐ๋ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
โข
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Linked List)
โฆ
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ตฌ์กฐ๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋น์ทํ์ง๋ง, ํฌ์ธํฐ ๊ณต๊ฐ์ด ๋ ๊ฐ๊ฐ ์๊ณ , ๊ฐ๊ฐ์ ํฌ์ธํฐ๋ ์์ ๋
ธ๋(forward, next)์ ๋ค์ ๋
ธ๋(backwards, prev)๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
โข
๋ค์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Multiply Linked List)
โฆ
๋ค์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ ๊ฐ ์ด์์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํฌํจํ๋ค.
โข
์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Circular Linked List)
โฆ
์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ผ๋ฐ์ ์ธ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋
ธ๋์ ์ฒ์ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐ์์ผ ์ํ์ผ๋ก ๋ง๋ ๊ตฌ์กฐ์ด๋ค.
Linked List ์ฐ์ฐ
โข
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋
ธ๋์ ์ฝ์
๊ณผ ์ญ์ ๊ณผ์ ์ ์ดํด๋ณธ๋ค. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ prev ์ next ๋ฅผ ๋ชจ๋ ์์ ํด์ฃผ๋ฉด ๋๋ค.
๋ ธ๋ ์ฝ์
โข
Node A์ C ์ฌ์ด์ B๋ฅผ ์ฝ์
ํ๊ณ ์ ํ ๋, B๊ฐ C๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ ํ, A๊ฐ B๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
function insertAfter(Node node, Node newNode) // insert newNode after node
newNode.next := node.next
node.next := newNode
JavaScript
๋ณต์ฌ
๋ ธ๋ ์ญ์
โข
Node A, B, C๊ฐ ์ฐจ๋ก๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋, B๋ฅผ ์ญ์ ํ๊ณ ์ ํ๋ค๋ฉด, A๊ฐ C๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ ํ, Node B๋ฅผ ์ญ์ ํ๋ค.
function insertAfter(Node node, Node newNode) // insert newNode after node
newNode.next := node.next
node.next := newNode
JavaScript
๋ณต์ฌ