Javascript Linked List [알고리즘]

cptkuk91·2023년 2월 15일
0

FC

목록 보기
17/18

Linked List.

두개의 필드를 가지고 있다. 종류는 다양하다. Single, Double, Multiple, Circle 등등..

const list = {
	head: {
    	value : 50,
        next : {
        	value: 25,
            next : {
            	value: 12,
                next : {
                	value: 5,
                    next : null
				}                
            }
        }
    }
}

class Node {
	constructor(data) {
    	this.data = data;
        this.next = null;
    }
}

class LinkedList {
	constructor() {
    	let init = new Node("init");
        this.head = init;
        this.tail = init;
        
        this.current = undefined;
        this.데이터수 = 0;
    }
    
    // list의 길이
    length () {
    	return this.데이터수;
    }
    
    append(data){
    	let newNode = new Node(data);
        
        this.tail.next = newNode;
        this.tail = newNode
        this.데이터수 += 1;
    }
    
    toString(){
    	let 전체노드 = this.head;
        전체노드 = 전체노드.next;
        
        let s = "";
        for(let i = 0; i < this.데이터수; i++){
        	s += `${전체노드.data}, `
            전체노드 = 전체노드.next;
        }
        // -2를 한 이유는 위 for문에서 ,(스페이스바)를 지우기 위함
        return `[${s.slice(0, -2)}]`;
    }
    
    // 위에는 문자열, fullData()를 통해서 배열로 변환할 수 있다.
    get fullData(){
    	let 전체노드 = this.head;
        전체노드 = 전체노드.next;
        
        let s = "";
        for(let i = 0; i < this.데이터수; i++){
        	s += `${전체노드.data}, `
            전체노드 = 전체노드.next;
        }
        // -2를 한 이유는 위 for문에서 ,(스페이스바)를 지우기 위함
        return JSON.parse(`[${s.slice(0, -2)}]`);
    }
    
    // 중간에 값 집어 넣기
    insert(index, data) {
    	let 전체노드 = this.head;
        전체노드 = 전체노드.next;
        
        // for문이 달라진다. index - 1까지 순회해라.
        for(let i = 0; i < index - 1; i++){
            전체노드 = 전체노드.next;
        }
        
        let newNode = new Node(data);
        newNode.next = 전체노드.next;
        전체노드.next = newNode;
        
        this.데이터수 += 1;
    }
}

result = new LinkedList();
result.append(1);
result.append(2);
result.append(3);
result.append(4);
console.log(result.length());
console.log(result);
console.log(result.fullData); // [1, 2, 3, 4]
result.insert(2, 500);
console.log(result.toString()); // [1, 2, 500, 3, 4]

insert 부분이 좀 어렵다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글