두개의 필드를 가지고 있다. 종류는 다양하다. 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 부분이 좀 어렵다.