Search
Duplicate

Linked List

์ƒ์„ฑ์ผ
2023/03/05 07:33
ํƒœ๊ทธ
์ž๋ฃŒ๊ตฌ์กฐ

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
๋ณต์‚ฌ

ref)