반응형
며칠 전에 진산님께서 모의면접시 `투두리스트 구현을 배열로 할래요 링크드리스트로할래요?`라는 질문을 받았다고 해서 생각해봤다.
그 동안은 배열로 구현하는게 편하니까 배열로만 구현했었다.
저 질문의 의도는 삽입,삭제가 유리한 링크드리스트를 쓸거냐 자료에 접근이 빠른 배열을 쓸거냐인데
투두리스트는 일단 데이터를 삽입하고 삽입한 데이터를 순서에 상관없이 접근해서 상태를 변경시켜줘야한다. 삭제를 할 때도 있지만 보통은 내가 뭘했는지 확인하기 위해 삭제를 잘 하지 않는다(나의 경우)
그래서 삽입과 자료 접근의 비율이 거의 1:1이라고 생각해서 어느 것을 써도 상관이 없을 것 같지만
완료될 때마 삭제하는 유저가 있을 수도 있으니 그런 상황을 생각하면 삽입,삭제 : 자료 접근 = 2:1의 비율이 된다.
이런 상황에서는 링크드리스트가 유리하다.
그래서 링크드리스트로 구현한 코드이다.
//링크드리스트 구현
function createNode(value, nextNode = null) {
return { value, nextNode };
}
function addNode(head, value) {
const newNode = createNode(value);
if (!head) {
return newNode;
}
let currentNode = head;
while (currentNode.nextNode) {
currentNode = currentNode.nextNode;
}
currentNode.nextNode = newNode;
return head;
}
function deleteNode(head, value) {
if (head && head.value === value) {
return head.nextNode;
}
let currentNode = head;
while (currentNode && currentNode.nextNode) {
if (currentNode.nextNode.value === value) {
currentNode.nextNode = currentNode.nextNode.nextNode;
return head;
}
currentNode = currentNode.nextNode;
}
return head;
}
function printList(head) {
let currentNode = head;
while (currentNode) {
console.log(currentNode.value);
currentNode = currentNode.nextNode;
}
}
이를 활용한 투두리스트 구현
//투두리스트
let todoList = null;
function addTodo(todo) {
todoList = addNode(todoList, todo);
}
function deleteTodo(todo) {
todoList = deleteNode(todoList, todo);
}
function printTodos() {
printList(todoList);
}
반응형
'매일 해내는 개발 > Develog' 카테고리의 다른 글
[Develog] 기술 면접 대비 질문과 답 #2 (1) | 2023.03.27 |
---|---|
[Develog] 좋아요 기능 optimistic update로 구현하기 (0) | 2023.03.22 |
[Develog] 자바스크립트에서 SSR 구현하는 방법 (0) | 2023.03.16 |
[Develog] SSR과 CSR 비교 (0) | 2023.03.15 |
[Develog] JAMStack과 정적 사이트 생성기 (0) | 2023.03.14 |
댓글