๐ ๋งํฌ๋ ๋ฆฌ์คํธ
- ์ ๋์ ์ผ๋ก ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ๋ผ์๋ค๊ฐ ๋ถ์๋ค๊ฐ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ
- ๋งํฌ๋ ๋ฆฌ์คํธ ์์์ ์ฝ์ /์ญ์ ์ ๊ฐ์ ์ด ์๋ค.
- ๋น๋ฒํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์ญ์ ํด์ผํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข๋ค.
๐ง ๋ฐฐ์ด vs ๋งํฌ๋ ๋ฆฌ์คํธ
- ์ด์ ๋ฐ๋๋ก ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์ญ์ ๊ณผ์ ์ด ๋ฒ๊ฑฐ๋กญ๋ค. ์์ ๋ณ๊ฒฝ ํ, ์ฌ์ ๋ ฌ์ด ์ด๋ฃจ์ด ์ง๋ค.
- ๋น๋ฒํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผ ํ๋ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์ธ๋ฑ์ค ๊ฐ์ ๋ฐ๋ผ ํ๋ฒ์ ๊ฐ์ ์ฐพ๊ธฐ ๋๋ฌธ.
์์) __ ๊ฐ ๋
ธ๋๋ค์ ์ฐ๊ฒฐํ๊ธฐ
class Node {
constructor(data) {
this.data = data;
//ํฌ์ธํฐ๋ก ์ฌ์ฉํ ๊ฐ์ด ํ์ํด์ ๋ง๋ฌ.
this.next = null;
}
}
class LinkedList {
constructor(value) {
//ํค๋๋ก ์์ํ ๊ฐ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ง๋ฌ.
this.head = new Node(value);
this.nodeCount = 0;
}
//๋
ธ๋๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ง๋ฌ.
append(value) {
let curr = this.head;
//curr.next๊ฐ null์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ ํ๋ํ๋ ๋ณด๋ฉด์ ์ฐพ๋๊ฑฐ์.
while (curr.next !== null) {
curr = curr.next;
}
//newNode ๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ฑฐ๊ธฐ์ ์๋ก ๋ง๋ node๋ฅผ ์ง์ด๋ฃ์.
const newNode = new Node(value);
//ํค๋ ๋
ธ๋์ next ๊ฐ์ผ๋ก ๋ฐฉ๊ธ ๋ง๋ newNode ๋ฃ์ด์ค.
curr.next = newNode;
// ๋งํฌ๋๋ฆฌ์คํธ ๋ช๊ฐ์ ๋ ๋
ธ๋๊ฐ ์๋์ง ์
. _ get, add ํ ๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฉ์ด
this.nodeCount++;
}
}
์ ์์์์, while ๋ฌธ ๋ถ๋ถ์ด ์ ๋ง ์ดํด๊ฐ ์๊ฐ์๋ค.
๋ถ๋ช
next๋ null์ด๋ฌ๋๋ฐ, ์ null์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋์ฌ๋๊น์ง ๋ฐ๋ณตํ๋ ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์๋ค.
๋ต์ ๋ฐ๋ก ์๋์ ์์๋ค.
๋ฐ๋ก ์๋์์ ๊ธฐ์กด์ ์๋ ๋
ธ๋์ ์๋ก์ด ๋
ธ๋๋ฅผ ๋ถ์ฌ์ค ๋์,
.next๊ฐ์ผ๋ก ๋ค์ ๋
ธ๋๋ฅผ ์ง์ ํด ์ค๋ค. __์ด๋ ๊ฒ __>>> curr.next = newNode;
์ด while ๋ฌธ์์๋, null์ธ ๊ฒฝ์ฐ๋ง์ ์ฐพ๊ธฐ ๋๋ฌธ์,
์ง๊ธ ์ด ๋ฐ๋ณต๋ฌธ ์์๋ ์ด๋ฏธ .next์ ๊ทธ๋ค์ ๋
ธ๋๊ฐ ๋ค์ด๊ฐ ์๋ค.
๋งํฌ๋๋ฆฌ์คํธ ์์ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ , ์ถ๊ฐํ๋ ๋ถ๋ถ๊น์ง ์๋ ์์์ ๋์์๋ค
์ ์ฒด ์์)
class Node {
constructor(data) {
this.data = data;
//ํฌ์ธํฐ๋ก ์ฌ์ฉํ ๊ฐ์ด ํ์ํด์ ๋ง๋ฌ.
this.next = null;
}
}
class LinkedList {
constructor(value) {
//ํค๋๋ก ์์ํ ๊ฐ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ง๋ฌ.
this.head = new Node(value);
this.nodeCount = 0;
}
//๋
ธ๋๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ง๋ฌ.
append(value) {
let curr = this.head;
//curr.next๊ฐ null์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณ์ ํ๋ํ๋ ๋ณด๋ฉด์ ์ฐพ๋๊ฑฐ์.
while (curr.next !== null) {
curr = curr.next;
}
//newNode ๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ฑฐ๊ธฐ์ ์๋ก ๋ง๋ node๋ฅผ ์ง์ด๋ฃ์.
const newNode = new Node(value);
//ํค๋ ๋
ธ๋์ next ๊ฐ์ผ๋ก ๋ฐฉ๊ธ ๋ง๋ newNode ๋ฃ์ด์ค.
curr.next = newNode;
// ๋งํฌ๋๋ฆฌ์คํธ ๋ช๊ฐ์ ๋ ๋
ธ๋๊ฐ ์๋์ง ์
. _ get, add ํ ๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฉ์ด
this.nodeCount++;
}
//๋งํฌ๋๋ฆฌ์คํธ ์์ ์ํ๋ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋
getNode(index) {
//ํด๋น ์ธ๋ฑ์ค๊ฐ ์ ํจํ ๊ฐ์ธ์ง nodeCount ์ ๊ฐ์ด๋ ๋น๊ตํด์ผํจ.
if (index > nodeCount) {
console.log("linkedList ์ ํฌ๊ธฐ๋ณด๋ค ๋ฒ์ด๋ ๊ฐ ์
๋๋ค.");
} else {
//index๊ฐ ์ ํจํ ๊ฐ์ธ ๊ฒฝ์ฐ ์๋ ์คํ.
//node์ ๋งํฌ๋๋ฆฌ์คํธ์ ์์ ๋
ธ๋๋ฅผ ๋ฃ์ด์ฃผ๊ณ ,
let node = this.head;
//์ํ๋ ์ธ๋ฑ์ค ์์์ ๋๋ฌํ ๋ ๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ฉฐ ๋
ธ๋๋ค์ ์ง๋์ด.
for (let i = 0; i < index; i++) {
node = node.next;
}
//๊ฒฐ๊ตญ ๋๋ฌํ ๋
ธ๋ ๋ฆฌํด.
return node;
}
}
}
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
23/10/19 TIL __ ๊ฒ์๊ธฐ๋ฅ_ ์ ์ด์ฟผ๋ฆฌ ์์ด ์์ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ (0) | 2023.10.19 |
---|---|
23/10/18 TIL __ ํ๋ก๊ทธ๋๋จธ์ค lv1. ์ถ์ต์ ์ (1) | 2023.10.18 |
23/10/16 TIL __ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ (promise, generator, async/await) (2) | 2023.10.16 |
23/10/15 TIL __ .call() / .apply() / .bind() (1) | 2023.10.15 |
23/10/14 TIL __ this ์ ๋ฐ์ธ๋ฉ (0) | 2023.10.14 |