자바스크립트 자료구조 - 단일 연결리스트 #2

REASON·2022년 9월 10일
0

자료구조

목록 보기
7/15

자바스크립트 자료구조 - 단일 연결리스트 #1

지난 번에 Node, LinkedList class를 만들고 append, pop, insert까지 코드를 작성했었다.

연결 리스트 맨 뒤에 노드 추가하기 (append)
연결 리스트 임의의 위치에 노드 추가하기 (insert)
연결 리스트 맨 뒤 노드 제거하기 (pop)

연결 리스트 임의의 위치 노드 제거하기 (remove)
연결 리스트 모든 요소 출력하기 (items)
연결 리스트 길이 출력하기 (size)

이번에는 remove, items, size 메서드를 구현해볼 것이다.

remove()

특정 노드 값 제거하기

remove(removeData) {
    let start = this.head;
    let prev;

    while (start.next !== null) {
      prev = start;
      start = start.next;

      if (removeData === start.data) {
        prev.next = start.next;
        this.size--;
        break;
      }
    }
  }

삭제하고자 하는 데이터를 넣으면 가장 앞쪽에 있는 데이터가 삭제된다.
일치하는 모든 데이터를 삭제하는 기능도 넣어야 하려나(?)

printItems()

연결 리스트의 모든 요소 출력하기

printItems() {
  let start = this.head.next;
  let text = "";
  for (let i = 0; i < this.size; i++) {
    text += `${start.data}, `;
    if (start.next !== null) start = start.next;
  }

  return text.slice(0, -2);
}

현재 연결 리스트의 요소를 모두 출력해준다.

listLength()

연결 리스트의 현재 길이 출력하기

listLength() {
  return this.size;
}

테스트 해보기


const l = new LinkedList();
l.append("111");
l.append("222");
l.append("333");

console.log(l.printItems());
console.log(l.listLength());

연결 리스트를 만들고 111, 222, 333 데이터를 삽입하였다.

/* 출력 결과 */
111, 222, 333  // 현재 연결 리스트 요소들
3 // 현재 연결 리스트 길이
l.insert("444", 0);
console.log(l.printItems());
console.log(l.listLength());
444, 111, 222, 333 // 현재 연결 리스트 요소들
4 // 현재 연결 리스트 길이

특정 인덱스 데이터 삽입도 잘 된다.

l.append("111");
l.append("222");
l.append("333");
l.insert("444", 0);
l.pop();
console.log(l.printItems());
console.log(l.listLength());


l.remove("444");
console.log(l.printItems());
console.log(l.listLength());

데이터 삭제도 테스트해봤다.

444, 111, 222 
3

111, 222 
2

어렵진 않은 내용인데 생각했던 것보다 코드로 구현하려니 코드를 이해하는데 시간이 오래 걸렸다.
코드 짤때도 이해하는데 오래 걸렸던 부분이 헷갈렸었다.

그래도 한번 만들어보면서 연결 리스트에 대한 개념 이해하는데 도움이 돼서 다음에 다시 만들 때는 더 금방(?) 잘 짤 수 있을 것 같다는 생각이 든다.
이중 연결 리스트나 원형 연결 리스트도 찾아서 공부해봐야겠다. ㅎㅎ

0개의 댓글