[データ構造アルゴリズム]リンクリスト??


リンクリストとは?


コンピュータ資料構造の一種で、1列のデータを格納するために使用される.
データを格納するスペースがあれば、データに次のデータアドレスがあります.

Array


アレイは物理的にアレイの部屋の大きさを持つため、部屋の大きさを増やしたり減らしたりすることはできません.
したがって、配列を追加するたびに、配列を再宣言、コピー、追加する必要があります.
長さが不確定なデータを処理する場合は、リンクリストを使用します.

リンクリストの追加と削除

const LinkedList = (() => {
    function LinkedList() {
        this.length = 0;
        this.head = null;
    }

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

    LinkedList.prototype.add = function (value) {
        let node = new Node(value);
        let current = this.head;

        if(!current) { // 노드가 없을때
            this.head = node; // 노드 추가
            this.length ++;
            return node;
        }
        while(current.next) { // 노드가 있을때 마지막 노드 찾기
            current = current.next
        }
        current.next = node // 마지막에 노드 추가
        this.length++;
        return node
    }

    LinkedList.prototype.remove = function (position) { // 첫번째 노드를 삭제하는건 다음 기회에 
        let current = this.head;

        while (current.next !== null) { // 노드를 돌면서 마지막노드가 아닐때 까지
            if (current.next.data === position) { // 다음 데이터가 내가 삭제해야 할 노드면
                current.next = current.next.next; // 내 다음노드를 바라보던 값을 다음다음값으로 변경
            } else {
                current = current.next;
            }
        }

        this.length--;
        return this.head;
    }
    return LinkedList;
})()

const list = new LinkedList();
list.add(1);
list.add(2);
list.add(3); // length 3
list.remove(2); // length 2