์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ํ๋ก ํธ์๋
- ๋ฐ๋ธ์ฝ์ค
- ์๊ณ ๋ฆฌ์ฆ
- fetch API
- Props
- useEffect
- ์ฝ๋ฉํ ์คํธ
- ํ๋ก๊ทธ๋๋จธ์ค
- CSS
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- float
- ๋ธ๋ก๊ทธ
- useRef
- Flex
- REACT
- history api
- position
- Gatsby
- Today
- Total
Daehyunii's Dev-blog
13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ณธ๋ฌธ
13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
Daehyunii 2022. 8. 12. 23:5413.1 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์๊ฐ(Singly Linked Lists)
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํ ์ข ๋ฅ๋ก ๋ฌธ์์ด, ์ซ์ ๋ฑ ๋ฌด์์ด๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ค. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ์ด ํ ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์ฐ๊ฒฐ๋๋ ์๋ฃ ๊ตฌ์กฐ๋ค. ๋ฐฐ์ด์ฒ๋ผ ์์์ ๋ฐ๋ผ ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ํ์ง๋ง ๋ฐฐ์ด๊ณผ์ ํฐ ์ฐจ์ด์ ์ด ์๋ค. ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๊ฐ ๋ฐ์ดํฐ ์์๋ค์ ์์น๊ฐ ์ง์ ๋๋ค. ์ฆ, ๋ฐฐ์ด์ ์ธ๋ฑ์ค๊ฐ ๋ถ์ฌ๋๋ค. ์๋ก์ด ๋ฐ์ดํฐ ์์๋ฅผ ์ถ๊ฐํ ๋ ๋ง๋ค ๋ฐฐ์ด์ ๊ทธ ์์น์ ๋ฐ๋ฅธ ์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ง๋ค. ๋ฐ๋ฉด ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ค์ ๋ค์ ๋ฐ์ดํฐ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ธ๋ฑ์ค ์์ด ๊ทธ๋ฅ ๋ค์์ ๋ฐ์ดํฐ ์์๋ค๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ ์ธ๋ฐ์ค๋ ์๋ค.
๋ฐ๋ผ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ค์ ๋ค์์ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋๊ณ ๊ฐ ๋ ธ๋๋ ๋ฌธ์์ด ํน์ ์ซ์์ ๊ฐ์ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ฐ ๋ ธ๋๋ค์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์ ๋ณด ์ญ์ ์ ์ฅํ๊ณ ์์ด์ผ ํ๋ฉฐ ๋ ์ด์ ๋ค์ ๋ ธ๋๊ฐ ์์ ๊ฒฝ์ฐ null์ ์ ์ฅํ๊ฒ ๋๋ค. ์ค์ํ ์ ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ค๊ฐ์ ์๋ ๋ ธ๋๋ค์ ํ๋ ํ๋ ๋ค ์ถ์ ํ์ง ์๋๋ค. ํค๋ ๋ ธ๋๊ฐ ์ด๋ ์๋์ง๋ง ์๊ณ ์์ ๊ฒ์ด๋ฉฐ ํค๋ ๋ ธ๋๋ถํฐ ๋ค์ ๋ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์์๋ด๊ณ , ๋ ๋ฒ์งธ ๋ ธ๋์์ ์ธ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์์ ๋ด๋ ๋ฐฉ์์ผ๋ก ๋ง์ง๋ง ํ ์ผ ๋ ธ๋๊น์ง ์ ๊ทผํ๊ฒ ๋๋ค. ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ์ฉํ๊ธฐ ์ํด ๋ง์ง๋ง ์ธ ๋ฒ์งธ ํ๋กํผํฐ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ '๊ธธ์ด'๋ฅผ ๊ณ์ ์ ์งํ์ฌ ํ์ฉํ๋ฉด ์ข๋ค.
โ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ง ์ ๋ฆฌ
1. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. ๋์ ๋จ์ํ ์ฒซ ๋ ธ๋์์ ์๋ฏธํ๋ ํค๋ ๋ ธ๋์ ๋ ๋ ธ๋์์ ์๋ฏธํ๋ ํ ์ผ ๋ ธ๋๋ฅผ ๊ฐ์ง ๋ฟ์ด๋ค.
2. ์ํ๋ ๋ ธ๋๋ฅผ ์ฐพ์๋, ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ ๋๋ ํค๋ ๋ ธ๋๋ถํฐ ์์ํ์ฌ ํ๋์ฉ ๊ณ์ ์ด๋ํ์ฌ ๋ ธ๋๋ฅผ ์ฐพ๊ฑฐ๋, ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
3. ๊ฐ ๋ ธ๋๋ next ํฌ์ธํฐ(ํ๋กํผํฐ)๋ฅผ ํตํด ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ ์ด๋ ์์ ์ ๊ทผ์ด ํ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.(์ํ๋ ์ง์ ๋ฐ๋ก ์ ๊ทผ ๋ถ๊ฐ)
4. ์๋ก์ด ํญ๋ชฉ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํญ๋ชฉ์ ์ ๊ฑฐํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ํจ์จ์ ์(๋ฐฐ์ด์ ๋งจ ๋ค์ ์์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๊ฐ ๋ค ๋ณ๊ฒฝ๋์ด์ผ ํ์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํ ํ์๊ฐ ์๋ค.)
โป์ฉ์ด ์ ๋ฆฌ
1. ํค๋ : ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
2. ํ ์ผ : ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
13.2 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ๋ฉ์๋ ๊ตฌํํ๊ธฐ
class Node{
constructor(val){
this.val = val; // ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
this.next = null; // nextํ๋กํผํฐ์ ๋ค์ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํด(๋จ์ผ ์ฐ๊ฒฐํ๋ ๊ฒ์)
}
}
class SinglyLinkedList{
constructor(){
this.head = null; //ํค๋ ํฌ์ธํฐ
this.tail = null; //ํ
์ผ ํฌ์ธํฐ
this.length = 0; // ์ด ๊ธธ์ด
}
}
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ธ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํค๋, ํ ์ผ, ๊ทธ๋ฆฌ๊ณ ๋ ธ๋์ ๊ธธ์ด๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
13.3 push ๋ฉ์๋ ๊ตฌํ
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ , ๋ฆฌ์คํธ์ ์ถ๊ฐํ ๋ ธ๋๋ฅผ ๋ง๋ค์์ผ๋ ์ด์ push ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋งจ ๋ง์ง๋ง์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ๋ง๋ ๊ฒ์ด๋ค.(๋ฐฐ์ด์ push ๋ฉ์๋์ ๋์ผํ ๊ธฐ๋ฅ์ ํ๊ฒ ๊ตฌํ) ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ํ ์ผ์ด ๊ฐ๋ฆฌํค๋ ๊ฒ์ ๋ง์ง๋ง ๋ ธ๋๋ก ๋ฐ๊ฟ์ฃผ๊ณ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ํ๋ ๋๋ ค์ค์ผ ํ๋ค๋๊ฒ์ ์ฃผ์ํด์ผ ํจ
13.4 pop ๋ฉ์๋ ๊ตฌํ
push๋ฉ์๋์ ๋์๋๋ ๋งจ ๋ค์ ์์นํ๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ํ๋ pop๋ฉ์๋๋ค.(๋ฐฐ์ด์ pop๋ฉ์๋์ ๋์ผํ ๊ธฐ๋ฅ์ ํจ) push ๋ฉ์๋์ ๋ฐ๋๋ก ๊ธธ์ด๋ฅผ ํ๋ ์ค์ฌ์ฃผ๊ณ , ํ ์ผ์ ์ ๊ฑฐํ ๋ ธ๋์ ๋ฐ๋ก ์ ๋ ธ๋๋ก ์ฎ๊ฒจ์ค์ผ ํจ. ์ค์ํ ์ ์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๊ธฐ ๋๋ฌธ์ ํค๋์์ ์ถ๋ฐํด์ ๋งจ ๋์ ์๋ ๋ ธ๋๋ฅผ ์ฐพ์์ผ ํ๋ค.
13.5 shift ๋ฉ์๋ ๊ตฌํ
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ์์ ์๋ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ๋ฆฌ์คํธ ๋งจ ์์ ๋ฌด์์ด ์๋์ง shift ๋ฉ์๋๋ ๊ทธ๊ฒ์ ์ ๊ฑฐํ๋ค. ์ด๋ ํ์ฌ ํค๋๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ ํ ํค๋๋ฅผ ์๋ ํค๋๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฆฌ์คํธ์ ๋ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ฑ์ค ๋ชจ๋๋ฅผ ๋ค์ ์์ ํด์ผ ํ๋ ๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ๋ฆฌ์คํธ ๊ธธ์ด์ ๊ด๊ณ์์ด ํญ์ ๋์ผํ ์๊ฐ์ ์ฒ๋ฆฌํ ์ ์๋ค.
13.6 unshift ๋ฉ์๋ ๊ตฌํ
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ์์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์ฆ ์๋ก์ด ๋ ธ๋๋ฅผ ๋งจ ์์ ์ถ๊ฐํ๊ณ ํค๋๋ฅผ ์๋ก ์ถ๊ฐํ ๋ ธ๋๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ํค๋๊ฐ ์์ ๊ฒฝ์ฐ์๋ ํค๋์ ํ ์ผ ๋ชจ๋ ์๋ก์ด ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํ๋ค.
13.7 get ๋ฉ์๋ ๊ตฌํ
get๋ฉ์๋๋ ์์น๋ฅผ ์๋ฏธํ๋ ์ซ์๋ฅผ ์ธ์๋ก ๋ฐ์์ ์ฃผ์ด์ง ์์น์ ์๋ ๋ ธ๋๋ฅผ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ์๋๋ค. ์๋ฅผ ๋ค์ด 0์ ์ธ์๋ก ์ฃผ๋ฉด ์ฒซ ๋ฒ์งธ ๋ ธ๋์ธ ํค๋๋ฅผ ๋ฐํํ๊ฒ ๋๋ค. ์ค์ํ ์ ์ ์ฃผ์ด์ง ์ซ์ ๋งํผ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ผ๊ฐ ํ ํด๋น ์์น์ ๋ ธ๋๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ๋ฐฐ์ด๊ณผ ๋น๊ตํ์๋ ํจ์จ์ ์ธ ๋ฉ์๋๋ ์๋๋ค. ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ํ๋ ํ์๋ฅผ ์ถ์ ํ๋ counter ๋ณ์๋ฅผ ๋ง๋ค์ด ์ด๋ํ ๋๋ง๋ค counter ๋ณ์๋ฅผ ์ฆ๊ฐ์์ผ ์ถ์ ํ๋ค.
13.8 set ๋ฉ์๋ ๊ตฌํ
set ๋ฉ์๋๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌ ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ์ธ์๋ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฐ, ๋ ๋ฒ์งธ ์ธ์๋ ํด๋น ์์น์ ๋ ธ๋์ value๋ฅผ ๊ฐฑ์ ํ ๊ฐ์ ๋ฐ์ ํด๋น ์์น์ ๋ ธ๋์ value๋ฅผ ์์ ํ๋ค. ์ด ๊ณผ์ ์์ ํด๋น ์์น์ ์๋ ๋ ธ๋๋ฅผ ์ฐพ์๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ get ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค.
13.9 insert ๋ฉ์๋ ๊ตฌํ
insert ๋ฉ์๋๋ set ๋ฉ์๋์ ๊ฐ์ด ์ธ๋ฑ์ค์ ๊ฐ์ ์ธ์๋ก ๋ฐ์๋ค์ธ๋ค. ํ์ง๋ง ์ด๋ฏธ ์กด์ฌํ๋ ๋ ธ๋๋ฅผ ๊ฐฑ์ ํ๋ ๋์ ์ฃผ์ด์ง ๋ ธ๋๋ฅผ ๊ทธ๊ณณ์ด ์ด๋๋ ์ฃผ์ด์ง ์์น์ ์๋กญ๊ฒ ์ฝ์ ํ๋ ๊ฒ์ด๋ค. ์ธ์๋ก ๋ฐ์ ์์น์ ์๋ ๋ ธ๋์ ์ธ์๋ก ๋ฐ์ ์์น์ ์๋ ๋ ธ๋์ ์ ๋ ธ๋ ์ฌ์ด์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ์ด ๊ณผ์ ์์ ํด๋น ์์น์ ์๋ ๋ ธ๋๋ฅผ ์ฐพ์๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ get ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค.
13.10 remove ๋ฉ์๋ ๊ตฌํ
remove ๋ฉ์๋๋ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ์ธ์๋ก ๋ฐ์์ ํด๋น ์์น์ ์๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ ๊ฑฐ๋ ๋ ธ๋์ ์ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค. ๋ง์ฝ ์ ๊ฑฐ๋๋ ๋ ธ๋๊ฐ ๋งจ ์์ ์์นํ ๋ ธ๋์ธ ๊ฒฝ์ฐ์๋ shift ๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ ๋งจ ๋ค์ ์์นํ ๋ ธ๋์ธ ๊ฒฝ์ฐ์๋ pop ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ธ์๋ก ๋ฐ์ ์์น์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ ์ํด get ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค.
13.11 reverse ๋ฉ์๋ ๊ตฌํ
reverse ๋ฉ์๋๋ ๋ ธ๋์ ์์๋ฅผ ๋ค์ง๋ ๊ธฐ๋ฅ์ ํ๋ค. ๋ฆฌ์คํธ ๋ด์ ๋ ธ๋์ ์์น๋ฅด๋ฆฌ ์ญ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด๋ค. ํค๋๋ฅผ ํ ์ผ๋ก ๋ง๋ค๊ณ , ๊ธฐ์กดํค๋์ next๊ฐ ๋ฐ๋๋ก ์๋ก์ด ํ ์ผ์ ๊ฐ๋ฆฌํค๋๋ก ๋ง๋ค์ด ์ค๋ค.
class Node{
constructor(val){
this.val = val;
this.next = null;
}
}
class SinglyLinkedList{
constructor(){
this.head = null;
this.tail = null;
this.length = 0;
}
push(val){
var newNode = new Node(val);
if(!this.head){//๋
ธ๋ ์์ด ๋น์ด์๋ ๊ฒฝ์ฐ์ ์คํํ ์กฐ๊ฑด๋ฌธ์
this.head = newNode; // ํฌ์ธํฐ ์ญํ
this.tail = this.head; // ํฌ์ธํฐ ์ญํ (๋น์ด ์๋ ๊ฒฝ์ฐ ํค๋์ ํ
์ผ ๋ชจ๋๊ฐ ์๋กญ๊ฒ ์์ฑ๋ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ค์ ํ๋ ๊ฒ์)
//๋จ๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์๋ฃ๊ตฌ์กฐ(๊ฐ์ฒด)๋ง์ ํน๋ณํ ํน์ง์
} else {
this.tail.next = newNode; //this.tail ์์ฒด๊ฐ ๋
ธ๋์;;์ด๊ฑด ๋
ธ๋ ์ฐ๊ฒฐ์//๊ทธ๋์ nextํ๋กํผํฐ๋ฅผ ๊ฐ์ ์์๋๊ฑฐ์
this.tail = newNode; // ์ฌ๊ธฐ์๋ list ๊ฐ์ฒด์ ํ
์ผ์ด ๋ญ์ง ์๊ธฐ ์ํด ์ ์ฅ(๊ฐ์ฒด ์์ฒด๊ฐ๊ฒ์ ๊ฐ๋ฆฌํด)
}
this.length++;
return this;
}
/*
๊ฐ์ฒด ์์ฑ
๋
ธ๋ ์์ฑ(ํค๋,<-ํ
์ผ)
next : ๋
ธ๋ ์์ฑ (<-ํ
์ผ)
next : ๋
ธ๋ ์์ฑ (<-ํ
์ผ)
next : ๋
ธ๋ ์์ฑ (<-ํ
์ผ) ํ
์ผ์ด ๋ง์ง๋ง์ผ๋ก ์ ์ฅ๋ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก tail.next์ ์ ๊ทผ ๊ฐ๋ฅ
์ฆ, ๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ ํ๋์ ํน๋ณํ ์ผ์ด์ค๊ฐ ์๊ณ (ํค๋์ ํ
์ผ์ด ๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํด)
๋น์ด ์์ง ์์ ๊ฒฝ์ฐ ํ์ฌ์ ํ
์ผ์ ์ด์ฉํ๋ค.(this.tail.next)
๋ฆฌ์คํธ์ ํ๋กํผํฐ์ ๋
ธ๋์ ํ๋กํผํฐ๋ฅผ ์ ํํ๊ฒ ๊ตฌ๋ถํด์ ๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์
์ด ๋ฆฌ์คํธ์๋ ์ ๋ฐฑ๋ง์ ํญ๋ชฉ๋ค์ด ์ ์ฅ๋์ด ์๋๋ผ๋ push()๋ ์์ฃผ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
๋จ์ง ํ
์ผ์ ์ด์ฉํด ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ์๋ก์ด ๋
ธ๋๋ฅผ ์ถ๊ฐํ๊ณ
ํ
์ผ์ ๋งจ ๋์ ๊ฐ๋ฆฌํค๋๋ก ํ ์๋ฆฌ ์์ง์ฌ ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
*/
pop(){
if(!this.head) return undefined;
var current = this.head;
var newTail = current;
while(current.next){
newTail = current;
current = current.next;
}
this.tail = newTail;
this.tail.next = null;
this.length--;
if(this.length === 0){ // ๋ฆฌ์คํธ์ ํ๋์ ๋
ธ๋๋ง ๋จ๊ฒจ์ ธ ์์ ๊ฒฝ์ฐ๋ ํน๋ณํ ์ผ์ด์ค๊ฐ ๋์ด null์ ๋ฐ๋ก ์ถ๊ฐํด์ค์ผํจ
this.head = null;
this.tail = null;
}
return current;
}
shift(){// ๋ฆฌ์คํธ ๊ฐ์ฒด์ ๊ฐ์ฅ ์์ ๋
ธ๋๋ฅผ ์ญ์ ํ๊ณ
if(!this.head) return undefined;
var currentHead = this.head;
this.head = currentHead.next;
this.length--;
if(this.length === 0){ // ๊ฐ์ด ํ๋์ธ ๊ฒฝ์ฐ ์ด๋ฐ ์ํฉ์ด ๋ฐ์ํ๋๋ฐ, ์ด๋ฏธ this.head.next๋ null ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก
this.tail = null; //this.head๊น์ง ๋ค์ null ๊ฐ์ ํ ๋นํด ์ค ํ์ ์์
}
return currentHead;
}
unshift(val){
var newNode = new Node(val);
if(!this.head) {
this.head = newNode;
this.tail = this.head;
} else {
newNode.next = this.head;
this.head = newNode;
}
this.length++;
return this;
}
get(index){ // ์ฃผ์ด์ง ์์น์ ๋
ธ๋๋ฅผ ๋ฐํ
if(index < 0 || index >= this.length) return null;
var counter = 0;
var current = this.head;
while(counter !== index){
current = current.next;
counter++;
}
return current;
}
set(index, val){ // ์ธ์๋ก ๋ฐ์ ์์น๋ฅผ ์ธ์๋ก ๋ฐ์ ๊ฐ์ผ๋ก ๊ฐฑ์
var foundNode = this.get(index);
if(foundNode){
foundNode.val = val;
return true;
}
return false;
}
insert(index, val){ // ์ธ์๋ก ๋ฐ์ ์์น์ ์ธ์๋ก ๋ฐ์ ๊ฐ์ ์ถ๊ฐํ๊ณ ์ฐ๊ฒฐํ๊ณ
if(index < 0 || index > this.length) return false;
if(index === this.length) return !!this.push(val); //๋ช
์์ ํ์
๋ณํ
if(index === 0) return !!this.unshift(val); // ๋ถ์ ๋
ผ๋ฆฌ ์ฐ์ฐ์ ๋ ๋ฒ ์ฌ์ฉ
var newNode = new Node(val);
var prev = this.get(index - 1);
var temp = prev.next;
prev.next = newNode;
newNode.next = temp;
this.length++;
return true;
}
remove(index){ // ์ธ์๋ก ๋ฐ์ ์์น์ ์๋ ๋
ธ๋๋ฅผ ์ญ์ ํ๊ณ
if(index < 0 || index >= this.length) return undefined;
if(index === 0) return this.shift();
if(index === this.length - 1) return this.pop();
var previousNode = this.get(index - 1);
var removed = previousNode.next;
previousNode.next = removed.next;
this.length--;
return removed;
}
reverse(){
var current = this.head;
this.head = this.tail;
this.tail = current;
var next;
var prev = null;
for(var i = 0; i < this.length; i++){
next = current.next; // ํ์ฌ ๋
ธ๋์ next ํ๋กํผํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ next ๋ณ์์ ๋ด๊ณ
current.next = prev; // ํ์ฌ ๋
ธ๋์ ๋ฅ์คํธ ํ๋กํผํฐ๊ฐ prev ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋๊ฒ
//node.next๋ก ๋จผ์ next๋ณ์์ ๊ฐ์ ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํด๋๊ณ , ๊ทธ ๋ค์์ ์ด์ node.next์ ๊ฐ์ prev๋ณ์๋ก ๋ณ๊ฒฝํ๋๊ฒ์!!
//ํ๋ง๋๋ก next ๋ณ์๋ ๊ธธ์ก์ด ์ญํ node๊ฐ ๊ฐ ๊ธธ์ ๋ฏธ๋ฆฌ ๊ธธํฐ๋๊ณ , node ๋ณ์๊ฐ ํธํ๊ฒ
//node๋ณ์์ ๋
ธ๋์ next ํ๋กํผํฐ๋ฅผ ํธํ๊ฒ prev๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ง๋ค์ด ์ค
prev = current;
current = next; //์ฌ๊ธฐ๊น์ง ๋ณด๋ฉด current์ next ๋ณ์์ ๋ค์ด์๋ ๋
ธ๋๊ฐ ๊ฐ์ด ์์
//๊ทธ๋ฌ๋ค๊ฐ ๊ทธ ๋ค์ ๋ฐ๋ณต๋ฌธ๋ next๊ฐ ๋ค์ ๋
ธ๋๋ก ๋์ด๊ฐ๊ฒ๋จ
}
return this;
}
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
15 ์คํ & ํ (0) | 2022.08.14 |
---|---|
14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.13 |
11 ํต ์ ๋ ฌ (0) | 2022.08.08 |
10 ํฉ๋ณ ์ ๋ ฌ (0) | 2022.08.07 |
09 ์ฝ์ ์ ๋ ฌ (0) | 2022.08.07 |