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๋กœ ๋Œ€์‹  ๊ฐ€๋Šฅ

๋ฏธ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

image

์œ„์—์„œ ํŒŒ๋ž€์ƒ‰์ด VideoData class์˜ ๊ฐ์ฒด์ด๊ณ  ์ด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” MyLinkedList๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ตฌํ˜„๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

  1. add(VideoData newData)
    • ๋จผ์ € ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์˜ˆ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” MyLinkedList์˜ head ๊ฐ€ newData ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ nextNode ๊ฐ€ null ์ธ ์ง€์ (๋งˆ์ง€๋ง‰์ง€์ )๊นŒ์ง€ ๊ฐ€์„œ nextNode๊ฐ€ newData ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.
  2. delete(VideoData newData)
    • delete()๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ MyLinkedList์— ์žˆ๋Š”์ง€ ๊ฒ€์ฆ ํ›„์— ์‹คํ–‰ํ•˜๋„๋ก ์ „์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค.
    • id๋ฅผ ๋น„๊ตํ•ด์„œ ๋™์ผํ•œ id๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค.
      • ๋ฐ์ดํ„ฐ๊ฐ€ 0๋ฒˆ์งธ index์— ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” head๋ฅผ 0๋ฒˆ์งธ ๋…ธ๋“œ์˜ nextNode์™€ ์ผ์น˜์‹œ์ผฐ๋‹ค.
      • ๋ฐ์ดํ„ฐ๊ฐ€ 0๋ฒˆ์งธ index๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” (index - 1) ๋…ธ๋“œ์˜ nextNode๋ฅผ index์˜ nextNode๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.
  3. 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);
	}
}
  1. get(int index)
    • ๋‹จ์ˆœํžˆ index ๋งŒํผ for๋ฌธ์„ ํ†ตํ•ด์„œ nextNode๋ฅผ ์ฐพ์•„๊ฐ€์„œ index์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.
  2. size()
    • add ๋˜๋Š” insert ์‹œ์—๋Š” size++, delete ์‹œ์—๋Š” size-- ๋ฅผ ํ†ตํ•ด ์ „์—ญ๋ณ€์ˆ˜๋กœ size๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

insert์‹œ ๋…ธ๋“œ์˜ ์ฐธ์กฐ(nextNode)๋ฅผ ์—ฐ์‚ฐํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ 

์œ„์˜ 3๋ฒˆ์˜ insert ์ˆœ์„œ๋กœ ํ•œ ๊ฒฝ์šฐ

์ฐธ์กฐ๋ฅผ ๋ฐ”๊พธ๋Š” ์ˆœ์„œ๋ฅผ 3๋ฒˆ์˜ insert์™€ ๋ฐ˜๋Œ€๋กœ ํ•œ ๊ฒฝ์šฐ

์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ธธ์„ ์žƒ๊ฒŒ ๋œ๋‹ค. ์ดํ›„์— ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ GC์— ์˜ํ•ด ์žƒ๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž tmp ๊ฐ’์„ ํ†ตํ•ด์„œ ์ž„์‹œ๋กœ (index - 1)์˜ nextNode๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ฝ”๋“œ์˜ ์–‘์„ ๋Š˜๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.