๋งํฌ๋๋ฆฌ์คํธ (Linked List)
์ดํ์ ๋ค๋ฃจ๊ฒ ๋๋ ํธ๋ฆฌ, ๊ทธ๋ํ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐ๋ฐํ์ด ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ฐฐ์ด์ฒ๋ผ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์์๋๋ก ์ง์ ํ๊ธฐ ์ํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
๋ฐฐ์ด์์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์์๋๋ก ์์ง๋์ด ์ ์ฅ๋๋ค๋ฉด, ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํฉ์ด์ ธ์ ์ ์ฅ๋๋ค.
์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ฝ์ , ์ญ์ ์ฐ์ฐ์ด ์์ฒญ๋๊ฒ ๋ง์ ๊ฒฝ์ฐ, ์์๋ค์ ์ด๋์์ ๋ ๊ทธ์ ๋ฐ๋ผ ๋น๋กํ๋ค. ์ด๋ ์ฑ๋ฅ์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ด ๊ฐ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋นํจ์จ์ฑ ๋ฌธ์ ๋ฅผ ๊ทธ๋๋ก ๊ฐ๊ณ ์๋ค.
ํน์ง
data์ ์ ๋ ฅ๊ณผ ์ญ์ ๊ฐ ์์ ๋กญ๋ค. ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋, ์ธ๋ก์ด ๋ฐ์ดํฐ๋ ๋ค์ด๊ฐ๊ณ ์ํ๋ ์์น์ ํด๋นํ๋ ์ node์ tail์ ์์ ์ data๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์์ ์ tail์ ํ์ node์ ์ฐ๊ฒฐํ๋ค.
1. ์์์ ์ฝ์ ์ญ์ ์์ ์ฉ์ดํ๋ค.
2. ํน์ ์์ ๊ฒ์์ ๋นํจ์จ์ ์ด๋ค.
๊ทธ๋ฌ๋ Linked List์์๋ ์ค๊ฐ์ ์ฝ์ ํ๋๋ผ๋ ๋ฐ๋ก ์ ๊ณต๊ฐ์ ๋ฃ์ ํ์๊ฐ ์๋ค. ์๋ฌด๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ค์ ์ด์ ์์๊ฐ ์๋ก์ด ์์๋ฅผ ๊ฐ๋ฆฌํค๋๋ก, ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ์์๊ฐ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋งํฌ์ ์ฐ๊ฒฐ๋ง ์กฐ์ ํด์ฃผ๋ฉด ์ฝ๊ฒ ์์๋ฅผ ์ค๊ฐ์ ๋ผ์๋ฃ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฐฐ์ด์์ ์์๋ฅผ ์ค๊ฐ์ ์ฝ์ ํ๋ ๊ฒ์ O(n)์ ์๊ฐ์ด ์์๋๊ณ Linked List์์๋ O(1)์ด ์์๋๋ค.
๋งํฌ๋๋ฆฌ์คํธ ๊ตฌํํ๋ ค๋ฉด?
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋งํฌ๋๋ฆฌ์คํธ๋ ๊ฐ์ฒด๋ฅผ ํตํด ๊ตฌํํ ์ ์๋ค.
์์๋ก ๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ next๋ก ์ฐ๊ฒฐํ์ฌ ๋งํฌ๋๋ฆฌ์คํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
๋งํฌ๋๋ฆฌ์คํธ์ ์ฐ์ฐ
๋งํฌ๋๋ฆฌ์คํธ์์ ์ถ๊ฐ, ์ญ์ , ์ฝ์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด์๋ ํ์ ๊ณผ์ ์ด ํ์ํ๋ค. ์ถ๋ฐ ์ง์ ๊ณผ ๋ ์ง์ ์ด ์์ด์ผํ๊ณ , head ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ด ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์ ํ๋ค.
const linkedList = () => {
this.head = null; // ์ฒ์์ ๋
ธ๋๊ฐ ์์ผ๋ฏ๋ก null๋ก ์ด๊ธฐํ
this.length = 0; // ๋งํฌ๋๋ฆฌ์คํธ์ ๊ธธ์ด
}
๋งํฌ๋๋ฆฌ์คํธ์์ ๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ ๋ 2๊ฐ์ง์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1. ํ์
2. ์ฐ์ฐ
๋งํฌ๋๋ฆฌ์คํธ์ A → B → C ์์๋๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๊ณ , ์ฐ๋ฆฌ๋ D๋ผ๋ ๋ฐ์ดํฐ๋ฅผ B์ C ์ฌ์ด์ ์ฝ์ ํ๋ ค๊ณ ํ๋ค.
B์ D ๊ฐ ํ์ํ๋ค. B๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ(link)๊ฐ D๊ฐ ๋ค์ด์๋ ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌ์ผ์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋์์ D๊ฐ ๋ค์์ผ๋ก ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๊ฐ(link)๋ฅผ C๋ฅผ ๊ฐ๋ฆฌํค๊ฒ๋ ํด์ผํ๋ค.
1) ๋ฐ์ดํฐ ์ถ๊ฐ
'head๊ฐ null ์ผ ๋ / head๊ฐ null์ด ์๋ ๋'๋ฅผ ๋๋์ด์ ๋ฃ์ด์ค๋ค.
linkedList.add = (data) => {
const newNode = new Node(data);
if(this.head === null) {
this.head = newNode;
this.length++;
} else {
let currentNode = this.head;
while(currentNode.link !== null) {
currentNode = currentNode.link;
}
currentNode.link = newNode;
this.length++;
}
}
1-1) ๋ฐ์ดํฐ ์ถ๊ฐ (์ค๊ฐ๋ ธ๋์๋ฆฌ)
LinkedList.prototype.insertMiddleNode = (pre, data) => {
const newNode = new Node(data);
let currentNode = this.head;
while(currentNode.data !== pre){
currentNode = currentNode.link;
}
let temp = currentNode.link;
newNode.link = temp;
currentNode.link = newNode;
this.length++;
}
2-1) ๋ฐ์ดํฐ ์ ๊ฑฐ (๋ง์ง๋ง ๋ ธ๋)
LinkedList.prototype.remove = () => {
let currentNode = this.head;
while(currentNode.link.link !== null) {
currentNode = currentNode.link;
}
currentNode.link = null;
thiks.length--;
}
2-2) ๋ฐ์ดํฐ ์ ๊ฑฐ (์ค๊ฐ ๋ ธ๋)
if(currentNode.data !== data) {
while(currentNode.link.data !== data) {
currentNode = currentNode.link;
}
temp = currentNode.link.link;
currentNode.link.link = null;
currentNode.link = temp;
} else {
temp = currentNode.link;
currentNode.link = null;
this.head = temp;
}
this.length--;
์ฐธ๊ณ
2. https://taesung1993.tistory.com/10
'๐กAlgorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฃ๊ตฌ์กฐ | ์๋ฐ์คํฌ๋ฆฝํธ ์คํ(stack) (0) | 2021.09.26 |
---|---|
์๋ฃ๊ตฌ์กฐ | ํด์(Hash) with JS (0) | 2021.09.24 |