Written on
·
49
0
class LinkedList {
length = 0;
head = null;
tail = null;
add(value) {
if (this.head) {
this.tail.next = new Node(value);
this.tail.next.prev = this.tail;
this.tail = this.tail.next;
} else {
this.head = new Node(value);
this.tail = this.head;
}
this.length++;
return this.length;
}
search(index) {
return this.#search(index)[1]?.value;
}
#search(index) {
let count = 0;
let prev;
let current = this.head;
while(count < index) {
prev = current;
current = current?.next;
count++;
}
return [prev, current];
}
remove(index) {
const [prev, current] = this.#search(index);
if (prev) {
prev.next = current.next;
this.length--;
return this.length;
} else if(current){ // index = 0 일 떄
current = current.next;
this.length--;
return this.length;
}
if (current.next === null) { // index = tail
this.tail = current.prev;
current.prev.next = null;
this.length--;
}
// 삭제 대상 없을 때 아무것도 안함.
}
}
class Node {
next = null;
prev = null;
constructor(value) {
this.value = value;
}
}
const li = new LinkedList();
li.add(1);
li.add(2);
li.add(3);
li.add(4);
li.add(5);
console.log(li.add(6));
console.log(li.remove(5));
console.log(li.remove(4));
console.log 찍었을때는 오류 없이 나온거 같은데 잘 구현 했나 궁금합니다!
remove() 부분을 다시 고쳐봤는데 어떤가요?
그리고 마지막에 remove(0)을 2번 반복했을떄 -1이 return 되는데 length에 조건이 없어서 그런건가요?