๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Python ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ๋ฐฐ์šฐ๋Š” ํŠœํ† ๋ฆฌ์–ผ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ๋ชจ๋“  ๊ฒƒ: ์‚ฌ์šฉ ์‹œ์ , ์ข…๋ฅ˜, ๊ทธ๋ฆฌ๊ณ  Python์—์„œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•˜์„ธ์š”.
ยท 9๋ถ„ ์ฝ๊ธฐ

AI์™€ ํƒํ—˜ํ•ด ๋ณด์„ธ์š”

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ ์กฐ์ง๊ณผ ๊ด€๋ฆฌ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„์˜ ์œ„์น˜์— ์ €์žฅ๋œ ์ผ๋ จ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„๊ณผ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ ๋ณด๋ฉด ๋‹ค์†Œ ์–ด๋ ต๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”!

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ณ ์œ ํ•œ ์žฅ์ ์ด ์žˆ๋Š”์ง€ ํ•ต์‹ฌ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์™œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ์š”?

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ์˜ ์—ฌ๋Ÿฌ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฝ์ž…๊ณผ ์‚ญ์ œ์˜ ์šฉ์ด์„ฑ

๋ฆฌ์ŠคํŠธ์—์„œ ๋์ด ์•„๋‹Œ ์ž„์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ ค๋ฉด ์ดํ›„ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋ฉฐ, ํŠนํžˆ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ํฝ๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ๋™์ž‘ ๋ฐฉ์‹์ด๋‚˜ ๊ตฌํ˜„์ด ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด Python ๋ฆฌ์ŠคํŠธ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ฐ˜๋ฉด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์›์†Œ๋ฅผ ๋น„์—ฐ์†์ ์ธ ์—ฌ๋Ÿฌ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ ๋•๋ถ„์— ๋งํฌ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ์ž„์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ ์ง€์ ์˜ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์—ฐ์‚ฐ ์ž์ฒด๋Š” O(1)์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ทธ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ˆœํšŒ์—๋Š” ์—ฌ์ „ํžˆ O(n)์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, O(1) ์ด์ ์€ ๊ด€๋ จ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ(์˜ˆ: ๋ฆฌ์ŠคํŠธ์˜ ๋จธ๋ฆฌ์—์„œ ์ž‘์—…ํ•  ๋•Œ)์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋™์  ํฌ๊ธฐ

Python ๋ฆฌ์ŠคํŠธ๋Š” ๋™์  ๋ฐฐ์—ด์ด๋ฏ€๋กœ ํฌ๊ธฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ณผ์ •์—๋Š” ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์œผ๋กœ์˜ ์žฌํ• ๋‹น ๋“ฑ ๋ณต์žกํ•œ ์ž‘์—…์ด ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ์žฌํ• ๋‹น ์‹œ ์›์†Œ๋ฅผ ์ƒˆ ๋ธ”๋ก์œผ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๊ณ , ๋‹น์žฅ ํ•„์š” ์ด์ƒ์œผ๋กœ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ์–ด ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์žฌํ• ๋‹น์ด๋‚˜ ๋ฆฌ์‚ฌ์ด์ง• ์—†์ด๋„ ๋™์ ์œผ๋กœ ์ปค์ง€๊ฑฐ๋‚˜ ์ž‘์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋†’์€ ์œ ์—ฐ์„ฑ์ด ํ•„์š”ํ•œ ์ž‘์—…์— ๋” ์ ํ•ฉํ•œ ์„ ํƒ์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

๋ฆฌ์ŠคํŠธ๋Š” ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•ด ์—ฐ์†๋œ ๋ธ”๋ก์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด ํ™•์žฅ์ด ํ•„์š”ํ•˜๋ฉด ๋” ํฐ ์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์ƒˆ๋กœ ํ• ๋‹นํ•˜๊ณ  ๊ธฐ์กด ์›์†Œ๋ฅผ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํŠนํžˆ ํฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์‹œ๊ฐ„๋„ ๋งŽ์ด ๋“ค๊ณ  ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์žก์œผ๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค.

์ด์— ๋น„ํ•ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ๋ณ„๋„๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์–ธ์ œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋™์  ํฌ๊ธฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ๋“ฑ ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฐ์—ด ๋Œ€๋น„ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ํ•œ๊ณ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์›์†Œ๊ฐ€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์›์†Œ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋” ํฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ง์ ‘ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน์ • ์›์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฐ์—ด ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ• ์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋งŽ์€ ์›์†Œ๋ฅผ ์ž์ฃผ ์‚ฝ์ž…ํ•˜๊ณ  ์‚ญ์ œํ•ด์•ผ ํ•  ๋•Œ
  • ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ์ž์ฃผ ๋ณ€ํ•  ๋•Œ
  • ์›์†Œ์— ๋Œ€ํ•œ ์ง์ ‘ ์ ‘๊ทผ์ด ํ•„์ˆ˜๊ฐ€ ์•„๋‹ ๋•Œ
  • ๋ฐ์ดํ„ฐ์…‹์˜ ์›์†Œ๋‚˜ ๊ตฌ์กฐ๊ฐ€ ํฐ ๊ฒฝ์šฐ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์„ธ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๊ณ ์œ ํ•œ ์žฅ์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

Image of a singly linked list

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋กœ, ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋จธ๋ฆฌ(์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ)์—์„œ ๊ผฌ๋ฆฌ(๋งˆ์ง€๋ง‰ ๋…ธ๋“œ)๊นŒ์ง€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ๋ณดํ†ต ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ: ๋…ธ๋“œ์— ์ €์žฅ๋˜๋Š” ์‹ค์ œ ์ •๋ณด
  • ๋‹ค์Œ ํฌ์ธํ„ฐ: ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋‹ค์Œ ํฌ์ธํ„ฐ๋Š” ๋ณดํ†ต null๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ’์ด๋‚˜ ์ธ๋ฑ์Šค๋กœ ํŠน์ • ์›์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋จธ๋ฆฌ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋ฉฐ, ํฐ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์€ ๋งค์šฐ ํšจ์œจ์ ์ด๋ฉฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ค‘๊ฐ„์ด๋‚˜ ๋์—์„œ์˜ ์‚ฝ์ž…/์‚ญ์ œ๋Š” ํ•ด๋‹น ์ง€์ ๊นŒ์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์ž์ฃผ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

Image of a doubly linked list

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์–ด ํ•„์š”ํ•  ๋•Œ ์ด์ „ ๋…ธ๋“œ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด ์ œ์•ฝ์€ ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ์— ์ถ”๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ, ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ, ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์˜ ์„ธ ์š”์†Œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

Image of a circular linked list

์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์›ํ˜• ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ณธ ๋‹จ์ผ/์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ ๋์ด ์—†๊ณ  ๋ฐ˜๋ณตํ•ด์„œ ์ˆœํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ˆœํ™˜์  ํŠน์„ฑ์€ ๋งˆ์ง€๋ง‰ ํ”Œ๋ ˆ์ด์–ด์—์„œ ์ฒซ ํ”Œ๋ ˆ์ด์–ด๋กœ ์ด์–ด์ง€๋Š” ๋ณด๋“œ๊ฒŒ์ž„์ด๋‚˜ ๋ผ์šด๋“œ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ, ์—ฐ์†์ ์œผ๋กœ ๋ฐ˜๋ณต ์ˆœํšŒํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„ ์š”์•ฝ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ Python ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ๋ˆˆ์— ๋น„๊ตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฐ์‚ฐ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฐฐ์—ด/Python ๋ฆฌ์ŠคํŠธ
์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผO(n)O(1)
๊ฐ’์œผ๋กœ ํƒ์ƒ‰O(n)O(n)
์•ž๋ถ€๋ถ„์— ์‚ฝ์ž…O(1)O(n)
๋๋ถ€๋ถ„์— ์‚ฝ์ž…O(n)ํ‰๊ท  O(1)
์ค‘๊ฐ„์— ์‚ฝ์ž…O(n)O(n)
์•ž๋ถ€๋ถ„์—์„œ ์‚ญ์ œO(1)O(n)
๋๋ถ€๋ถ„์—์„œ ์‚ญ์ œO(n)ํ‰๊ท  O(1)

ํ•ต์‹ฌ ์š”์ : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋จธ๋ฆฌ(head)์—์„œ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ(O(1))์— ๊ฐ•ํ•˜์ง€๋งŒ, ๊ทธ ์™ธ์—๋Š” ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ์›์†Œ๋ฅผ ์ž์ฃผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ผ๋ฐ˜ Python ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋” ๋‚˜์€ ์„ ํƒ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

Python์—์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์ด์ œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋…, ์‚ฌ์šฉ ์ด์œ , ๋ณ€ํ˜•์„ ์ดํ•ดํ–ˆ์œผ๋‹ˆ Python์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋…ธํŠธ๋ถ์€ ์ด DataLab ์›Œํฌ๋ถ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์‹คํ–‰์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค!

๋…ธ๋“œ ์ดˆ๊ธฐํ™”

์•ž์„œ ๋ฐฐ์› ๋“ฏ, ๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋กœ์„œ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Python์—์„œ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

    def __repr__(self):
        return f"Node({self.data})"

์œ„ ์ฝ”๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋™์ž‘์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ์˜ โ€œdataโ€ ์†์„ฑ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๋‹ด์„ ์‹ค์ œ ์ •๋ณด๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. โ€œnextโ€ ์†์„ฑ์€ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ˜„์žฌ๋Š” None์œผ๋กœ ์„ค์ •๋˜์–ด ๋ฆฌ์ŠคํŠธ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ์ด ์†์„ฑ์€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค ์ƒ์„ฑ

๋‹ค์Œ์œผ๋กœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ๋“ฑ ๋…ธ๋“œ ๊ด€๋ฆฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์บก์Аํ™”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

class LinkedList:
    def __init__(self):
        self.head = None  # Initialize head as None

self.head๋ฅผ None์œผ๋กœ ์„ค์ •ํ•จ์œผ๋กœ์จ, ์ดˆ๊ธฐ์—๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ๊ณ  ๊ฐ€๋ฆฌํ‚ฌ ๋…ธ๋“œ๊ฐ€ ์—†์Œ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฑ„์›Œ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์•ž๋ถ€๋ถ„์— ์ƒˆ ๋…ธ๋“œ ์‚ฝ์ž…

LinkedList ํด๋ž˜์Šค ์•ˆ์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    def insertAtBeginning(self, new_data):
        new_node = Node(new_data)  # Create a new node 
        new_node.next = self.head  # Next for new node becomes the   current head
        self.head = new_node  # Head now points to the new node

์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ƒˆ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋…ธ๋“œ์˜ next ํฌ์ธํ„ฐ๋ฅผ ํ˜„์žฌ ๋จธ๋ฆฌ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ธฐ์กด ๋…ธ๋“œ๋“ค ์•ž์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“  ๋…ธ๋“œ๋ฅผ ๋ฆฌ์ŠคํŠธ์˜ ๋จธ๋ฆฌ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์‚ฝ์ž… ์—ฐ์‚ฐ์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์–ด๋“ค์„ ์‚ฝ์ž…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.

    def printList(self):
        temp = self.head # Start from the head of the list
        while temp:
            print(temp.data,end=' ') # Print the data in the current node
            temp = temp.next # Move to the next node
        print()  # Ensures the output is followed by a new line

์œ„ ๋ฉ”์„œ๋“œ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ •์˜ํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด โ€œthe quick brown foxโ€๋ผ๋Š” ๋‹จ์–ด๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ฑ„์›Œ ๋„ฃ๊ฒ ์Šต๋‹ˆ๋‹ค.

if __name__ == '__main__':
    # Create a new LinkedList instance
    llist = LinkedList()

    # Insert each letter at the beginning using the method we created
    llist.insertAtBeginning('fox') 
    llist.insertAtBeginning('brown') 
    llist.insertAtBeginning('quick')  
    llist.insertAtBeginning('the')  

    # Now 'the' is the head of the list, followed by 'quick', then 'brown' and 'fox'

    # Print the list
    llist.printList()

์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

"the quick brown fox"

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋๋ถ€๋ถ„์— ์ƒˆ ๋…ธ๋“œ ์‚ฝ์ž…

LinkedList ํด๋ž˜์Šค์— insertAtEnd๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ฆฌ์ŠคํŠธ์˜ ๋์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ์ƒˆ ๋…ธ๋“œ๊ฐ€ ๋จธ๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๋’ค์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    def insertAtEnd(self, new_data):
        new_node = Node(new_data)
        if self.head is None:
            self.head = new_node
            return
        last = self.head
        while last.next:
            last = last.next
        last.next = new_node

์ด ๋ฉ”์„œ๋“œ๋Š” ๋จผ์ € ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ๋จธ๋ฆฌ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ , ๊ทธ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ƒˆ ๋…ธ๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ LinkedList ํด๋ž˜์Šค์— ํฌํ•จํ•˜๊ณ , ๋ฆฌ์ŠคํŠธ์˜ ๋์— ๋‹จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜์„ธ์š”.

if __name__ == '__main__':
    llist = LinkedList()

    # Insert words at the beginning
    llist.insertAtBeginning('fox')
    llist.insertAtBeginning('brown')
    llist.insertAtBeginning('quick')
    llist.insertAtBeginning('the')

    # Insert a word at the end
    llist.insertAtEnd('jumps')

    # Print the list
    llist.printList()

์—ฌ๊ธฐ์„œ๋Š” insertAtEnd ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ๋ฆฌ์ŠคํŠธ์˜ ๋์— โ€œjumpsโ€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

"the quick brown fox jumps"

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์•ž๋ถ€๋ถ„์—์„œ ๋…ธ๋“œ ์‚ญ์ œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋จธ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋Š” ๋” ์ด์ƒ ๋ฆฌ์ŠคํŠธ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด LinkedList ํด๋ž˜์Šค์— ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜์„ธ์š”.

def deleteFromBeginning(self):
    if self.head is None:
        return "The list is empty" # If the list is empty, return this string
    self.head = self.head.next  # Otherwise, remove the head by making the next node the new head

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋๋ถ€๋ถ„์—์„œ ๋…ธ๋“œ ์‚ญ์ œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜์—ฌ ๋์—์„œ ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ณ , ๊ทธ ๋…ธ๋“œ์˜ next ํฌ์ธํ„ฐ๋ฅผ None์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ LinkedList ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

def deleteFromEnd(self):
    if self.head is None:
        return "The list is empty" 
    if self.head.next is None:
        self.head = None  # If there's only one node, remove the head by making it None
        return
    temp = self.head
    while temp.next.next:  # Otherwise, go to the second-last node
        temp = temp.next
    temp.next = None  # Remove the last node by setting the next pointer of the second-last node to None

์œ„ ๋ฉ”์„œ๋“œ๋Š” ๋จผ์ € ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋น„์–ด ์žˆ๋‹ค๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ฉด ๊ทธ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๋์—์„œ ๋‘ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ๊ทธ ๋…ธ๋“œ์˜ ๋‹ค์Œ ์ฐธ์กฐ๋ฅผ None์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฉ”์ธ ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์•ž๊ณผ ๋์—์„œ ์›์†Œ๋ฅผ ์‚ญ์ œํ•ด ๋ด…์‹œ๋‹ค.

if __name__ == '__main__':
    llist = LinkedList()

    # Insert words at the beginning
    llist.insertAtBeginning('fox')
    llist.insertAtBeginning('brown')
    llist.insertAtBeginning('quick')
    llist.insertAtBeginning('the')

    # Insert a word at the end
    llist.insertAtEnd('jumps')

    # Print the list before deletion
    print("List before deletion:")
    llist.printList()

    # Deleting nodes from the beginning and end
    llist.deleteFromBeginning()
    llist.deleteFromEnd()

    # Print the list after deletion
    print("List after deletion:")
    llist.printList()

์œ„ ์ฝ”๋“œ๋Š” ์‚ญ์ œ ์ „ํ›„์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ์˜ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

List before deletion:
the quick brown fox jumps 
List after deletion:
quick brown fox

ํŠน์ • ๊ฐ’์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•™์Šตํ•  ์—ฐ์‚ฐ์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋จธ๋ฆฌ์—์„œ ์‹œ์ž‘ํ•ด ๊ฐ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐพ๋Š” ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def search(self, value):
    current = self.head  # Start with the head of the list
    position = 0  # Counter to keep track of the position
    while current: # Traverse the list
        if current.data == value: # Compare the list's data to the search value
            return f"Value '{value}' found at position {position}" # Print the value if a match is found
        current = current.next
        position += 1
    return f"Value '{value}' not found in the list" 

์•ž์„œ ๋งŒ๋“  ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด, ๋ฐฉ๊ธˆ ๋งŒ๋“  search ๋ฉ”์„œ๋“œ๋ฅผ ๋ฉ”์ธ ํ•จ์ˆ˜์— ํฌํ•จํ•˜์„ธ์š”.

if __name__ == '__main__':
    llist = LinkedList()

    # Insert words at the beginning
    llist.insertAtBeginning('fox')
    llist.insertAtBeginning('brown')
    llist.insertAtBeginning('quick')
    llist.insertAtBeginning('the')

    # Insert a word at the end
    llist.insertAtEnd('jumps')

   # Print the list before deletion
    print("List before deletion:")
    llist.printList()

    # Deleting nodes from beginning and end
    llist.deleteFromBeginning()
    llist.deleteFromEnd()

    # Print the list after deletion
    print("List after deletion:")
    llist.printList()
    
        # Search for 'quick' and 'lazy' in the list
    print(llist.search('quick'))  # Expected to find
    print(llist.search('lazy'))   # Expected not to find

์œ„ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

List before deletion:
the quick brown fox jumps 
List after deletion:
quick brown fox 
Value 'quick' found at position 0
Value 'lazy' not found in the list

๋‹จ์–ด โ€œquickโ€์€ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์— ์กด์žฌํ•˜๋ฏ€๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด โ€œlazyโ€๋Š” ๋ฆฌ์ŠคํŠธ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ ์ƒ๊ฐ

์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค์…จ๋‹ค๋ฉด ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! ์ด์ œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ, ๊ตฌ์กฐ์™€ ์ข…๋ฅ˜, ์›์†Œ ์ถ”๊ฐ€/์‚ญ์ œ ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์ˆœํšŒ ๋ฐฉ๋ฒ•๊นŒ์ง€ ํƒ„ํƒ„ํžˆ ์ดํ•ดํ•˜์…จ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๊ฐ€ ๋์€ ์•„๋‹™๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ธ๊ณ„์˜ ์ถœ๋ฐœ์ ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ดํ•ด๋ฅผ ๋” ๊นŠ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฝ”๋”ฉ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•ด ์‹ค์ „์— ์ ์šฉํ•ด ๋ณด์„ธ์š”. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ, ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌ์„ฑ, GPS ๋‚ด๋น„๊ฒŒ์ด์…˜ ์‹œ์Šคํ…œ ๋ฐ ๋ณด๋“œ๊ฒŒ์ž„ ์ œ์ž‘ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด๋ ค๋ฉด Python, R, SQL๋กœ ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค ์ฃผ๋Š” ๋ฌด๋ฃŒ ๊ฐ€์ด๋“œํ˜• ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•™์Šต

ํŠธ๋ฆฌ, ์Šคํƒ, ํ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™•์žฅ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋“ค์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์›๋ฆฌ๋ฅผ ํ† ๋Œ€๋กœ ๋” ๋‹ค์–‘ํ•œ ๊ณ„์‚ฐ ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠธ๋ฆฌ์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ๋…์„ ๊ณ„์ธต์  ํ˜•ํƒœ๋กœ ํ™•์žฅํ•ด ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์š”์†Œ์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐœ๋…๋“ค์ด ๋‚ฏ์„ค๊ฒŒ ๋А๊ปด์ง€๋”๋ผ๋„ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”! Datacamp์—๋Š” Python์œผ๋กœ ๋ฐฐ์šฐ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ „์šฉ ๊ฐ•์˜๊ฐ€ ์žˆ์–ด ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์Šคํƒ, ํŠธ๋ฆฌ, ํ•ด์‹œ ํ…Œ์ด๋ธ”, ํ, ๊ทธ๋ž˜ํ”„ ๊ฐ™์€ ์ž๋ฃŒ ๊ตฌ์กฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ์ ์ฐจ ํƒ์ƒ‰ ๋ฐ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์–ด ๋” ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์ด์ž ๋ฌธ์ œ ํ•ด๊ฒฐ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ฐœ๋… ํƒ๊ตฌ

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆœํšŒ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค.

๋” ๋‚˜์•„๊ฐ€ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌํ˜„์„ ํ•™์Šตํ•ด ๋ณด์„ธ์š”. ์Šคํ‚ต ๋ฆฌ์ŠคํŠธ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ํ™•์žฅ์œผ๋กœ, ์›์†Œ์— ๋” ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•ด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์—ฌ ์ค๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•˜๋ฉด ๊ธฐ์ˆ  ์—ญ๋Ÿ‰์ด ํ•œ ๋‹จ๊ณ„ ๋„์•ฝํ•˜๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Šฅ๋ ฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์–ด ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค, ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ, ๋จธ์‹ ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด๋ง ๋“ฑ์—์„œ ๋” ๋ณต์žกํ•œ ๊ณผ์ œ์— ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ์ฃผ์ œ์— ๋„์ „ํ•˜๊ธฐ ์ „์— ๋” ๊ธฐ์ดˆ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, Python Programming ์Šคํ‚ฌ ํŠธ๋ž™์„ ์‚ดํŽด๋ณด์„ธ์š”. ์–ธ์–ด์˜ ๊ธฐ์ดˆ๋ฅผ ์ตํž ์ˆ˜ ์žˆ๋Š” ์ผ๋ จ์˜ ๊ฐ•์˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์ œ