linked List를 이해하기 위해서는 node라는 녀석부터 이해할 필요가 있어 보인다.
간단히 말하자면, node란 정보를 저장하는 저장소이다.
더도 말고 덜도 말고 나와 같은 코린이라면 그냥 저장소라는 것만 기억하면 충분다고 생각한다.
그런데, 이 노드라는 녀석에게는 next라는 속성이 있다.
이 next라는 속성이 각 노드(저장소)들을 연결할 수 있는 연결고리 역할을 한다.
너와 나의 연결고리 이건 우리 안의 노드... turn up?!
각 노드의 next 속성은 다음과 같이 데이터 정보가 흩어져 있는 경우에도 데이터를 찾아오는데 용이하다.
각 노드들은 next 속성을 통해서 다음 노드들의 정보를 가리키고 있기 때문에 흩어져 있는 데이터들도 찾을 수 있게 도와준다.
각 노드들을 연결하는 과정을 보면 next 속성의 값은 단순히 데이터 타입을 말하는 것이 아니라 레퍼런스라는 다른 영역의 것임을 알 수 있다.
레퍼런스의 사전적 정의는 참조한다라는 명사적 의미이다.
이 사전적 의미를 빌려 해석해 보자면 단순히 next 라는 속성은 단순히 다음 데이터를 저장하는 의미를 넘어서 데이터의 방향성(?)을 나타낸다고 생각한다.
class Node {
constructor(value) {
this.data = value; // 노드가 저장하는 데이터
this.next = null; // 다음 노드에 대한 레퍼런스
}
}
// 1, 3, 5, 7, 9, 11, 13을 담는 노드 생성
// 관계없음
head_node = new Node(1)
node_1 = new Node(3)
node_2 = new Node(5)
node_3 = new Node(7)
node_4 = new Node(9)
node_5 = new Node(11)
tail_node = new Node(13)
// 링크리스트 만들기
// 노드 연결
head_node.next = node_1
node_1.next = node_2
node_2.next = node_3
node_3.next = node_4
node_4.next = node_5
node_5.next = tail_node
// 노드 순서대로 출력
iterator = head_node
while (iterator) {
console.log(iterator.data)
iterator = iterator.next
}