Day06 - jeremy0405/Codesquad_CS GitHub Wiki
LinkedList
- ์์ดํ ์ ๋ณด๊ดํ๋ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐํ ์ ํ ์๋ฃ๊ตฌ์กฐ
- ์์ดํ ์ ํ๋ ํน์ ์ฌ๋ฌ ๊ฐ์ ๋ณด๊ด
- ํฌ์ธํฐ๋ ๋ค์ ๋ ธ๋๋ฅผ ์ฐธ์กฐ
List Operation
// ๊ตฌํ
size()
get(int index)
insert(int index)
delete(int index)
addLast()
// ๋ฏธ๊ตฌํ
isEmpty() -> return size == 0 ์ผ๋ก ๊ฐ๋จํ ๊ตฌํ๊ฐ๋ฅ ํ์์์ด๋ณด์ฌ์ ์๋ต
addFirst() -> ๊ตณ์ด ๋งํ์๋ฉด insert๋ก ๋์ ๊ฐ๋ฅ
๋ฏธ์ ์ ์ํํ๋ฉด์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ๋ค.
์์์ ํ๋์์ด VideoData class์ ๊ฐ์ฒด์ด๊ณ ์ด๋ฅผ ๋ด๊ณ ์๋ MyLinkedList๋ฅผ ๊ตฌํํ๋ค.
๊ตฌํ๋ฐฉ๋ฒ์ ๊ฐ๋จํ ์๊ฐํ๋ ค๊ณ ํ๋ค.
add(VideoData newData)
- ๋จผ์ ๋ฐ์ดํฐ๊ฐ ์์ ์๋ ๊ฒฝ์ฐ์๋ MyLinkedList์
head
๊ฐnewData
๋ฅผ ๊ฐ๋ฅดํค๋๋ก ํ๋ฉด ๋๋ค. - ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ
nextNode
๊ฐnull
์ธ ์ง์ (๋ง์ง๋ง์ง์ )๊น์ง ๊ฐ์ nextNode๊ฐnewData
๋ฅผ ๊ฐ๋ฅดํค๋๋ก ํ๋ฉด ๋๋ค.
- ๋จผ์ ๋ฐ์ดํฐ๊ฐ ์์ ์๋ ๊ฒฝ์ฐ์๋ MyLinkedList์
delete(VideoData newData)
- delete()๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๊ฐ MyLinkedList์ ์๋์ง ๊ฒ์ฆ ํ์ ์คํํ๋๋ก ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
- id๋ฅผ ๋น๊ตํด์ ๋์ผํ id๊ฐ ๋์ค๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
- ๋ฐ์ดํฐ๊ฐ 0๋ฒ์งธ index์ ์๋ ๊ฒฝ์ฐ์๋ head๋ฅผ 0๋ฒ์งธ ๋ ธ๋์ nextNode์ ์ผ์น์์ผฐ๋ค.
- ๋ฐ์ดํฐ๊ฐ 0๋ฒ์งธ index๊ฐ ์๋ ๊ฒฝ์ฐ์๋ (index - 1) ๋ ธ๋์ nextNode๋ฅผ index์ nextNode๋ก ๋ณ๊ฒฝํด์ฃผ์๋ค.
insert(VideoData newData, int index)
- ๋ฐ์ดํฐ๋ฅผ 0๋ฒ์งธ index์ insertํ๋ ค๋ ๊ฒฝ์ฐ์๋ newData์ nextNode๋ฅผ head์ ์ผ์น์ํจ ํ head๋ฅผ newData๋ก ๋ณ๊ฒฝํ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ 0๋ฒ์งธ๊ฐ ์๋ index์ insertํ๋ ค๋ ๊ฒฝ์ฐ์๋ (index - 1) ๋ ธ๋์ nextNode๋ฅผ newData์ nextNode์ ๋์ ํ ํ (index - 1)์ nextNode๋ฅผ newData๋ฅผ ๊ฐ๋ฅดํค๋๋ก ํ๋ค. insert ์ ์์๊ฐ ๋งค์ฐ ์ค์ํ๋ค
public void insert(VideoData newData, int index) {
if (index == 0) {
newData.setNextNode(this.head);
this.head = newData;
} else {
// (index - 1) ๋
ธ๋์ nextNode๋ฅผ newData์ nextNode์ ๋์
newData.setNextNode(get(index - 1).getNextNode());
// (index - 1) ๋
ธ๋์ nextNode์ newData๋ฅผ ๋์
get(index - 1).setNextNode(newData);
}
}
get(int index)
- ๋จ์ํ index ๋งํผ for๋ฌธ์ ํตํด์ nextNode๋ฅผ ์ฐพ์๊ฐ์ index์ ์๋ ๋ ธ๋๋ฅผ ๋ฐํํ๋ค.
size()
- add ๋๋ insert ์์๋
size++
, delete ์์๋size--
๋ฅผ ํตํด ์ ์ญ๋ณ์๋กsize
๋ฅผ ๊ด๋ฆฌํ๊ณ ์์๋ค. ์ด๋ฅผ ๋ฐ๋ก ๋ฐํํด์ฃผ์๋ค.
- add ๋๋ insert ์์๋
insert์ ๋ ธ๋์ ์ฐธ์กฐ(nextNode)๋ฅผ ์ฐ์ฐํ๋ ์์๊ฐ ์ค์ํ ์ด์
์์ 3๋ฒ์ insert ์์๋ก ํ ๊ฒฝ์ฐ
์ฐธ์กฐ๋ฅผ ๋ฐ๊พธ๋ ์์๋ฅผ 3๋ฒ์ insert์ ๋ฐ๋๋ก ํ ๊ฒฝ์ฐ
์์๋ฅผ ๋ฐ๊พธ๋ฉด ์์ ๊ฐ์ด ๊ธธ์ ์๊ฒ ๋๋ค. ์ดํ์ ์ฐธ์กฐ๋์ง ์์ ๋ชจ๋ ์๋ฃ๋ฅผ GC์ ์ํด ์๊ฒ ๋ ์๋ ์๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ tmp ๊ฐ์ ํตํด์ ์์๋ก (index - 1)์ nextNode๊ฐ์ ์ ์ฅํ ์๋ ์์ง๋ง ์ฝ๋์ ์์ ๋๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํ ํ์๋ ์๋ค.