๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ (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--;

 

 

 

 

์ฐธ๊ณ 

1. https://velog.io/@raram2/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%97%B0%EA%B2%B0-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC-%ED%86%B5%ED%95%9C-%EA%B5%AC%ED%98%84-Linked-List

2. https://taesung1993.tistory.com/10

 

+ Recent posts