sprint-data-structure-part2 메소드별 수도코드 정리

flobeeee·2021년 1월 22일
0

Sprint

목록 보기
8/25

🚀linked-list

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
    this.tail = null;
    this._size = 0;
  }

  // 연결리스트 끝에 추가하는 메소드
  addToTail(value) {
    let node = new Node(value)
    this._size ++;
    // 1. 데이터를 처음으로 추가할 때, head와 tail에 각각 node 할당
   
    // 2. 데이터가 이미 있는 경우. 
      // 2-1. tail.next 는 새로 만든 노드에 연결되게 하기
      // 2-2. tail 은 새로만든 노드로 변경
  }

  // 연결해제하는 메소드
  remove(value) {
    // 0. 데이터가 있는 경우에만 실행
    
      // 1. 헤드와 value 가 같을 때
        // 1-1. 헤드를 다음 노드로 변경하기
    	// 1-2. 사이즈 줄이기
      
      // 2. 헤드가 아닌경우 while문 돌릴 예정
        let prevHead = this.head; // head 를 저장
        let newHead = prevHead.next; // head 다음 노드를 저장
        let size = this._size; // 사이즈 쓸일이 있어서 복사
        while (size) {
          // 2-1. newHead 가 value와 같을 경우
            // 2-1-1. newHead 가 꼬리일 경우
              // preHead를 꼬리로 만들기
              // 꼬리도 preHead로 만들기
              // 자바스크립트라서 기존데이터가 쓸모없는데이터가 되면 알아서 사라짐(가비지 컬렉션)
              this._size--;
              }
            // 2-1-2. newHead가 꼬리가 아닐 경우
              //prevHead를 newHead 다음 노드와 연결
              this._size--;
            }
    	    // 2-1-3. 단계가 끝나면 while문 멈추기

          // 2-2. newHead 가 value가 아닐 경우 
            // preHead에 다음 노드 넣어서 while문 진행하기
            size--;
        }
  }
  
  // 주어진 index 노드 찾아서 반환하는 메소드
  getNodeAt(index) {
    let checkHead = this.head
    while(index > -1) {
      // 1. if index 가 0이고 checkHead 가 데이터가 있으면 반환
      
      // 2. if index 가 0 보다 큰 경우
        index--
        // 2-1. 다음 노드값이 없는경우 undefined 리턴
        // 2-2. 다음 노드값이 있는있는경우 checkHead 다음 노드로 할당 후 while문 진행
    }
    // 3. 여기까지해도 리턴되는 게 없으면 
    return undefined;
  }
	
  // 연결리스트에 해당 값이 있는지 존재유무 리턴
  contains(value) {
    // getNodeAt 메소드와 비슷하게 진행하면 됨.
  }

  // 주어진 값의 인덱스를 반환하는 메소드(없으면 -1 리턴)
  indexOf(value) {
    // getNodeAt 메소드와 비슷하게 진행하면 됨.
  }
  
  // linked-list 크기 반환하는 메소드
  size() {
    return this._size;
  }
}

module.exports = LinkedList;
profile
기록하는 백엔드 개발자

0개의 댓글