연결 리스트는 각 노드가 다음 노드에 대한 참조를 갖는 자료구조를 말한다.
첫번째 노드를 head, 마지막 노드를 tail이라고 한다.
각 노드는 data와 다음 노드를 가리키는 포인터로 이루어져있다.
배열에서는 "순서"가, 연결리스트에서는 "관계"가 중요하다.
function LinkedList() {
const list = {};
list.head = null;
list.tail = null;
list.length = 0;
};
function createNode(value) {
const node = {};
node.value = value;
node.next = null;
return node;
};
LinkedList.prototype.addToTail = function(value) {
const node = createNode(value);
if (!this.head) {
this.head = node;
this.tail = node;
} else {
const temp = this.tail;
temp.next = node;
this.tail = node;
}
this.length++;
};
LinkedList.prototype.removeHead = function() {
if (!this.head) return null;
const temp = this.head;
if (this.length === 1) {
this.head = null;
this.tail = null;
} else {
this.head = temp.next
}
this.length--;
return temp.value;
};
LinkedList.prototype.contains = function(target) {
let currentNode = this.head;
while (currentNode) {
if (currentNode.value === target) {
return true;
}
currentNode = currentNode.next;
}
return false;
};
LinkedList.prototype.reverse = function() {
let node = this.head;
this.head = this.tail;
this.tail = node;
let prev = null;
let next = null;
while (node !== null) {
next = node.next;
node.next = prev;
prev = node;
node = next;
}
};