โ 1. ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ณํ
(1) ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ฌธ์ ์
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํ๋์ ๋งํฌ๋ง ์๊ณ , ๊ฐ๊ฐ์ ๋ ธ๋์ ๋งํฌ๋ ํํ ๋ ธ๋๋ง์ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ์ด๋ค.
- ์ฆ, ํน์ ๋ ธ๋์ ํํ ๋ ธ๋๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ง๋ง, ํน์ ๋ ธ๋์ ์ ํ ๋ ธ๋์ ๋ํ ์ ๊ทผ์ ํค๋ ๋ ธ๋๋ถํฐ ์ฌ๊ฒ์์ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์์. ์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ณํํ ํํ๊ฐ ๋ง๋ค์ด์ง.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ณํ์ ์์ด๋ฏธ์ง์ ๊ฐ์ด ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ๋จ์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋ ์ ์์.
(2) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋?
- ๊ธฐ์กด ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํํ ๋ ธ๋๋ง์ ๊ฐ๋ฆฌํค๋ link ๋ง ์์.
- ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ ๊ฐ์ link ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ๊ฐ ์ ํ ๋ ธ๋, ํํ ๋ ธ๋์ ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ฒ ๋จ.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ํํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์์ด, ์์ค ์ฝ๋๊ฐ ๊ฐ๋จํด์ง๊ณ ํจ์จ์ด ์ฌ๋ผ๊ฐ ์ ์๋ ์ฅ์ ์ด ์์.
- ๋ค๋ง, link ์ฃผ์๋ฅผ 2๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋๋ค๋ ๋จ์ ์ด ์์.
(3) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋?
- ๋ง์ง๋ง ์์์ link ๊ฐ์ ํน์ ์์น์ link ์ฃผ์๊ฐ์ผ๋ก ๋ฃ์ ๋ฆฌ์คํธ๋ฅผ ์๋ฏธํจ. ์ฆ, ์ํ์ผ๋ก ๋๊ฒ๋๋ ์ํ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง.
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ดํด๋ณด๋ฉด, ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋์ ๋งํฌ ํ๋๋ ์ธ์ ๋ 'NULL' ๊ฐ์
- ๊ทธ๋์ ๋ง์ง๋ง ๋ ธ๋์ ๋งํฌ ํ๋๋ฅผ ํ์ฉํ๋ฉด์ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ๋์์ด ๋๋๋ก ํ๊ธฐ ์ํด์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์ ์์ด ๋จ.
โ 2. ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋์ ๋งํฌ ํ๋๋ฅผ ํ์ฉํด ์ํ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์๋ฏธํจ.
(1) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ฑ
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋์ผํ ์ฝ๋๋ก ์ ์๋๊ณ ์์ฑ์ด ๋๋ค.
(2) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋ ์ฝ์
- malloc(memory allocation) ์ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋๋ฐ listNode ์ ์ฌ์ด์ฆ ๋งํผ ํ ๋น์ ๋ฐ๋ ๊ฒ์ด๋ค.
- ๊ทธ ํ, ๋ง๋ค์ด์ง ์๋ก์ด ๋ ธ๋์ data ํ๋์๋ x ๋ฐ์ดํฐ์ link ๋ถ๋ถ์๋ NULL ์ ๋ฃ๊ฒ ๋๋ฉด ์๋ก์ด ๋ ธ๋๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
- ๊ธฐ์กด์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์๋ก์ด ๋ ธ๋๊ฐ ๋ง๋ค์ด์ง ๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ๋ง๋ค์ด์ง๋ ๋ก์ง์ด ์กฐ๊ฑด๋ฌธ์ ํตํด ๋ถ๊ธฐ๊ฐ ๋จ.
- ์ฆ, ๊ธฐ์กด์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์์ฑ์ด ๋์ด์๋ ์ํ์ด๊ณ ๋ฆฌ์คํธ ๋ด๋ถ๊ฐ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ์ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์๋ก ๋ง๋ค์ด์ง๋ ๋ ธ๋๊ฐ ์ด๋ค์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋ ์ง ๋ฌ๋ผ์ง.
- ๋ํ, ์์ ์ด๋ฏธ์ง ์์์ ๋ง์ง๋ง ๋ถ๋ถ H -> head = NewNode ์ ๋ฃ์ผ๋ฏ๋ก ์ด ์์๋ head ์ ์๋ก ๋ง๋ค์ด์ง NewNode ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ ์ผ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๋ฃ๊ฒ ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์.
(3) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋ ์ฝ์ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ณต๋ฐฑ ์ฌ๋ถ ์กฐ๊ฑด๋ฌธ ๋ถ๊ธฐ
[ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ ]
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ ์๋ก ๋ง๋ ๋ ธ๋์ ์ฃผ์๊ฐ์ head ์ ๋ฃ์ด์ฃผ๊ณ , ์๋ก ๋ง๋ค์ด์ง ๋ ธ๋์ link ์๋ ์๊ธฐ ์์ ์ ์ฃผ์๊ฐ์ ์ฐธ์กฐ๋ฅผ ํ๊ฒ ๋๋ค. ์ฆ, ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ํ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง.
[ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ ]
- ๋ฐ๋ณต๋ฌธ์ ํตํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ์ฐพ๊ฒ ๋จ.
- tempNode ๊ฐ ๊ฐ๋ฆฌํค๋ link ์ฆ, ์๊ธฐ ์์ ์ link ๊ฐ์ NewNode ์๋ก์ด ๋ ธ๋์ link ์ ๋ฃ์ ๊ตฌ์กฐ์ด๋ค.
- ์ดํ tempNode ์ link ๋ถ๋ถ์ NewNode ๋ฅผ ๋ฃ๊ฒ ๋๋ฉด ์๋ก์ด ๋ ธ๋์ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ์ฆ, tempNode ์ link ์๋ NewNode ์ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ์ต์ข ์ ์ผ๋ก head ์ NewNode ๋ฅผ ๋ฃ์ด ๊ธฐ์กด์ ์ฐธ์กฐํ๊ณ ์๋ tempNode ์ ์ฃผ์๊ฐ์ NewNode ๋ก ๋ฎ์ด ์์ฐ๊ฒ ๋จ.
- H -> head = NewNode; ์ด ๋ถ๋ถ์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ ์ผ ์ฒซ ๋ฒ์งธ ์์น์ ๋ฃ๊ธฐ ์ํ ๋ก์ง์ด๋ฏ๋ก ์ด๋ ๊ฒ ๋ฃ๊ฒ๋ ๊ฒฝ์ฐ๊ณ ํต์ฌ์ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ์ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ๋ถ๊ธฐ๊ฐ ๋๋ค๋ ๊ฒ๋ง ์๋ฉด ๋จ.
(4) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋ ์ฝ์ - ํน์ ๋ ธ๋ ๋ค์ ์ฝ์ ํ๋ ๊ฒฝ์ฐ
[ ํน์ ๋ ธ๋ ๋ค์ ์ฝ์ ํ๋ ๊ฒฝ์ฐ ]
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ค๊ฐ ์์น(prevNode ๋ค)์ ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ์ฐ์ฐ ์์์ด๋ค.
- ์ด๋ฏธ์ง์ ์ด๊ธฐ ์ํ ์ดํ NewNode ๊ฐ ์์ฑ๋๊ณ prevNode link ๋ฅผ NewNode ์ ์ฃผ์๊ฐ์ผ๋ก ๋ณ๊ฒฝ
- ๊ทธ๋ฆฌ๊ณ NedNode ๋ prevNode ๊ฐ ๊ฐ์ง๊ณ ์๋ link ๊ฐ์ NewNode ์ link ๋ก ๋ฃ์ด์ฃผ๊ฒ ๋จ.
- ์ด๋ ๊ฒ ๋๋ฉด ๋ง์ง๋ง ๋ถ๋ถ์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒฝ์ฐ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, ๊ฒฐ๊ณผ์ ์ผ๋ก ํน์ ๋ ธ๋ ๋ค์ ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ์ ์ฉ์ด ๋ ์ ์์.
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์๋ก์ด ๋ ธ๋๋ฅผ ํน์ ๋ ธ๋ ๋ค์ ์ฝ์ ํ๋ ์ฐ์ฐ์ด๋ค.
- ๋จผ์ ์ด๊ธฐ์ link ๊ฐ์ด NULL ์ธ NewNode ์ฆ, ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋๋ ์ฐ์ฐ์ ์ํํ๊ฒ ๋จ. ( ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ง๋ค์ด์ง )
- ์ดํ, ๊ธฐ์กด prevNode ์ link ๊ฐ์ NewNode link ์ ๋ฃ์ด์ฃผ๊ฒ ๋๋ค.
- ์ฆ, prevNode ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ 5000์ NewNode link ์ ๋ฃ์ด์ค์ผ๋ก์จ NewNode ๋ ๊ฐ์ด ๊ฐ๋ฆฌํค๋ ์ํฉ์ด ๋จ.
- ์ดํ, NewNode ์ ์ฃผ์๊ฐ์ prevNode ์ link ์ ๋ฃ์ด์ค์ผ๋ก์จ ์ต์ข ์ ์ผ๋ก ์ฝ์ ์ด ๋ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ชจ์ต์ด ๋จ.
(5) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ญ์
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ์ญ์ ๋ฅผ ํ ๋์๋ ํน์ ํ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ญ์ ๋ฅผ ํด์ค์ผํจ.
- ์๋์ ๋ก์ง์ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ญ์ ๋ฅผ ํ๋ ์ฝ๋๋ก ๋ณผ ์ ์์.
- ๋จผ์ ์กฐ๊ฑด๋ฌธ์ ํตํด ํด๋น ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ธ์ง(H -> head == NULL) ์ ์๋์ง๋ฅผ ํ์ ์ ํ๊ฒ ๋๋ค.
- ์ด์ ๋, ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ์๋ ์ ์ด์ ๋ ธ๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅ ํ๊ธฐ ๋๋ฌธ์.
- ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋ณต๋ฌธ์ ํตํด data ์ ๊ฐ์ด ๋ง๋ ๋ ธ๋๊ฐ ์๋์ง ๋ฆฌ์คํธ๋ฅผ ์ญ ์ค์บ์ ํ๊ฒ ๋๋ค.
- ๋ง์ฝ ์ฐพ์๋ค๋ฉด ์ญ์ ํจ์ ํธ์ถํ๋ฉด์ ๊ฒ์ ํจ์๋ ๋์ด ๋ ์ ์์.
- ๋ง์ฝ ๋ชป ์ฐพ์๋ค๋ฉด ์ฆ, ์ฐพ๋ ๊ฐ์ด ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ฒ ๋๋ค.
(6) ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ญ์ - ๊ณผ์
- H ๋ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ head ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, prevNode ์ ๋ฃ์ด์ค์ผ๋ก์จ head ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
- tempNode = H -> head; ๋ก์ง์ tempNode ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ๋ณ์ ์์ฑ ํ ๊ทธ ์์ ์ฒซ ๋ฒ์งธ ๋ ธ๋(head)์ ์ฃผ์๊ฐ์ ๋ฃ์ ์ํฉ์ด๋ค. ์ฆ, head ๋ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ํฌ์ธํฐ๊ณ tempNode ๋ ๊ทธ ์ฃผ์๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํด์ ๊ฐ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ ํฌ์ธํฐ ๋ณ์๋ก ๋ณผ ์ ์์.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฏธ์ง์ ๊ฐ์ด tempNode ๋ head ์ ์ฃผ์๊ฐ์ ํตํด 5000 ๋ฒ ๋ ธ๋๋ก ๊ฐ ์ํฉ์ด ๋๋ค.
- ์ดํ, prevNode = tempNode ์ฆ, prevNode ์ tempNode ๋ฅผ ๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด prevNode ๊ฐ ๊ธฐ์กด tempNode ์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ฉด์ prevNode ์ ์ฃผ์๊ฐ์ 5000์ด ๋๋ค.
- tempNode = tempNode -> link; ๋ก์ง์ tempNode ์ link ์๋ ๋ค์ ๋ ธ๋์ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ ์์ผ๋ฏ๋ก, ๋ค์ ๋ ธ๋๋ฅผ ํฌ์ธํ ํ๊ฒ ๋๋ฉด์ tempNode ๋ ์ฃผ์๊ฐ 6000 ์ผ๋ก ์ด๋์ ํ๊ฒ ๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ธ๋์ link ๋ฅผ ํตํด ์ด๋ํ๋ฉด์ data ๋น๊ต๋ฅผ ํตํด ์ํ๋ ์์์ ์์น๋ก ๊ฐ๊ฒ ๋๋ค. ์ฆ, ์ํ๋ฅผ ๋
- ์ดํ, deleteCircularNode() ํจ์๋ฅผ ํตํด ํด๋น ๋ ธ๋๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค.
- deleteCircularNode() ํจ์์์๋ ๋จผ์ lastNode ํฌ์ธํฐ ๋ณ์๋ฅผ ๋ง๋ค์ด head ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ๊ณผ lastNode ์ link ๊ฐ์ ๋น๊ตํ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ ๋๊ฒ ๋๋ฉด, lastNode ๊ฐ ์ด๋ค ๋ ธ๋์ธ์ง ์ ์ ์๊ฒ ๋๋ค. ์ฆ, lastNode ์๋ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋๋ก ์ด๋์ ํ๊ฒ ๋๋ค. ์ดํ, ์ด๋ฌํ lastNode ๋ฅผ ํ์ฉํด์ ์ญ์ ๋ฅผ ์งํํ๊ฒ ๋๋ค.
- prevNode -> link ์ฆ, prevNode ์ link ๋ ์ญ์ ํ ๋ ธ๋์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ํ์ด๋ฏ๋ก, ์ด๊ฒ์ delNode ๋ณ์ ์ฆ, ์ญ์ ํ ๋ ธ๋๋ก ๊ฐ์ฃผํ๊ณ link ๊ฐ์ ๋ฃ๊ฒ ๋๋ฉด delNode ์ธ ์ญ์ ํ ๋ ธ๋๊ฐ ๊ฒฐ์ ์ด ๋๊ฒ ๋๋ค.
- ์ดํ, delNode ๊ฐ ๊ฐ๋ฆฌํค๋ link ๋ถ๋ถ์ prevNode ๊ฐ ๊ฐ๋ฆฌํค๋ link ๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋๋ค.
- ์ด๋ ๊ฒ ๋๋ฉด prevNode ์ delNode ๋ ๋ค lastNode ์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
- ์ดํ, ์กฐ๊ฑด๋ฌธ์์ delNode == H -> head ์ธ ๊ฒฝ์ฐ๋ ์ญ์ ๋ ๋ ธ๋๊ฐ head ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋์ ์ฃผ์๊ฐ์ด ๋์ผ ํ ๊ฒฝ์ฐ lastNode ์ link ๊ฐ์ head ๊ฐ ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ์ผ๋ก ๋ฃ๊ฒ ๋๋ค.
- ์ต์ข ์ ์ผ๋ก delNode ๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค. ์ด๋ฌ๋ฉด ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ ์ง๊ฐ ๋ ์ํ๋ก ์ญ์ ๊ฐ ๋๋ค.
โ 3. ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ
(1) ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จ์
- ์ด๋ค ๋ ธ๋๋ฅผ ์ฐพ์์ ๊ฒฝ์ฐ, ๊ทธ ํน์ ๋ ธ๋์ ํํ ๋ ธ๋๋ ์ฝ๊ฒ ์ฐพ์ ์ ์์์ง๋ง, ์ด๋ค ํน์ ๋ ธ๋์ ์ ํ ๋ ธ๋๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ณต์กํ ๋ฐฉ๋ฒ์ด ํ์ํจ
- ์ฝ๊ฒ๋งํด, ์ด๋ค ํน์ ๋ ธ๋์ ์ ํ ๋ ธ๋๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ๋งค์ฐ ๊น๋ค๋กญ๊ณ ํ๋ค๋ค๋ ๋จ์ ์ด ์์.
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จ์ ์ ๋ณด์ํ๊ณ ์ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋ฑ์ฅํจ.
(2) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - ๋ ธ๋ ๊ตฌ์กฐ
- ์์ชฝ ๋ฐฉํฅ์ผ๋ก ์ํํ ์ ์๋๋ก head ๋งํฌ ํ๋๊ฐ ์ผ์ชฝ ์์์ (Lhead) ์ค๋ฅธ์ชฝ ์์์ (Fhead)๋ ๊ฐ ํ์ํจ
- ๋ ๊ฐ์ ๋งํฌ ํ๋ Llink, Rlink ์ ํ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง.
(3) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - ์ ์ ๋ฐ ์์ฑ
- ์์ ๊ฐ์ด ํค๋ ๋ ธ๋์ ์ผ๋ฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ ํ ์ ์์.
- ์ดํ, ์์ฑ ๊ณผ์ ์์๋ ๋ ธ๋๊ฐ ์๋ฌด๊ฒ๋ ์๋ ์ํ์ด๋ฏ๋ก, ๊ธฐ์กด๊ณผ ๋์ผํ๊ฒ NULL ์ ๋ฃ์ด ์ด๊ธฐํ๋ฅผ ํ ์ ์์.
(3) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - ํน์ ๋ ธ๋ ์ฝ์
- ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋๋ ๋ก์ง์ผ๋ก, link ๋ถ๋ถ ์ด๊ธฐ๊ฐ์๋ NULL ์ด ๋ค์ด๊ฐ๊ฒ ๋จ. ( ์๋ก์ด ๋ ธ๋ ์ ์ )
- ์ด๋ฌํ ์ด๊ธฐ ์ํ๋ฅผ ๊ฐ์ง๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์.
- ์๋ก์ด ๋ ธ๋๋ฅผ ์ ์ํ ๋ค ๋ฃ๋ ๊ณผ์ ์ ์์ ๊ฐ์ ์ฝ๋์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์์.
- ๋ฃ์ ์์น๋ฅผ prevNode ๋ค๋ก ๋ณด๋ฉฐ, ํด๋น ์์น์ ๋ฃ๊ธฐ ์ ์ NewNode ์ Rlink ๊ฐ prevNode ๋ค์ ๋ ธ๋์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ฒ๋จ.
- ์ดํ, prevNode ์ Rlink ๋ถ๋ถ์ NewNode ๋ฅผ ๋ฃ๊ฒ ๋๋ฉด, NewNode ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๋ ํํ๊ฐ ๋จ.
- ์ดํ, NewNode Llink ๋ถ๋ถ์ prevNode ์ ์ฃผ์๊ฐ์ ๋ฃ๊ฒ ๋๋ฉด ์ผ์ชฝ ์ฐ๊ฒฐ์ด ๋๊ฒ ๋๋ค.
- ์ต์ข ์ ์ผ๋ก NewNode ์ Rlink ๋ถ๋ถ์ ๋ณด๋ฉด 4000 ๋ฒ๋์ ์ฃผ์๋ก ์ค๋ฅธ์ชฝ ๋ ธ๋์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์.
- ์ด ์ฃผ์๋ฅผ ํตํด Llink ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฐ, ์ ๊ทผ์ ํ ๋ค NewNode ์ ์ฃผ์๋ฅผ ๋ฃ๊ฒ ๋๋ฉด NewNode ์ค๋ฅธ์ชฝ์ ๋ ธ๋ ์ฃผ์๊ฐ NewNode ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋จ.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต์ข ์ํ๋ ์์ ๊ฐ์ ํํ๋ก ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
- ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ ธ๋ ์ฝ์ ๊ณผ์ ์ ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ ํํ์ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ค์ด๊ฐ ์ ์๋ค๊ณ ๋ณด๋ฉด ๋จ.
(4) ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ - ํน์ ๋ ธ๋ ์ญ์
- ํด๋น ๋ก์ง์ ํตํด ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ ๋ ธ๋๋ฅผ ์ญ์ ํ ์ ์๋ค.
- ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ญ์ ์ด๊ธฐ ์ํ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด delNode ์ ์์น๋ฅผ ์๋ ์ํ์ด๋ค.
- ์ด์ ๋, ์ญ์ ๋ฅผ ํ ๋ ์ด๋ค๊ฑธ ์ญ์ ํ ์ง ์๋ ค์ค์ผ ํ๋๋ฐ, ๊ทธ๋ delNode ์ ์ฃผ์๊ฐ์ ์ฃผ๊ณ ์ญ์ ํ๊ธฐ ๋๋ฌธ์.
- ์ดํ, delNode -> Link -> Rlink = delNode ์ Llink ์ Rlink ๋ฅผ ์๋ฏธํ๋ฉฐ ๊ทธ ๊ณณ์ delNode ์ Rlink ๋ฅผ ๋ฃ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด delNode ์ Rlink ๊ฐ์ด ์ ํ๋ ธ๋์ Rlink ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ์ดํ, delNode ์ Rlink ์ Llink ์ฆ, ํํ๋ ธ๋์ Llink ๊ฐ์ delNode ๋ ธ๋์ Llink ๊ฐ์ ๋ฃ์ด์ฃผ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด delNode ์ ์ ํ, ํํ ๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ์ด ์ด๋ค์ง๊ฒ ๋๋ค.
- ์ดํ, delNode ๋ฅผ ์ญ์ ํ๊ฒ ๋๋ฉด ๊ธฐ์กด delNode ์ ์ ํ ํํ ๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ์ด ๋์ด์์ผ๋ฏ๋ก ์ฐ๊ฒฐ๋ ํํ๊ฐ ๋จ.
'๐๋ฐฉ์กํต์ ๋ํ๊ต > ๐ข์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] 5๊ฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2025.09.04 |
---|---|
[์๋ฃ๊ตฌ์กฐ] 4๊ฐ - ํ (0) | 2025.09.02 |
[์๋ฃ๊ตฌ์กฐ] 3๊ฐ - ์คํ (2) | 2025.08.25 |
[์๋ฃ๊ตฌ์กฐ] 2๊ฐ - ๋ฐฐ์ด (3) | 2025.08.22 |
[์๋ฃ๊ตฌ์กฐ] 1๊ฐ - ์๋ฃ๊ตฌ์กฐ๋ ๋ฌด์์ธ๊ฐ? (1) | 2025.08.21 |