본문 바로가기

CS

[자료구조]Linked list - 몇가지 구현 JS

공부하고 참고하면서 몇가지 문법들 작성하였습니다. 아직 코테를 풀기에는 부족한거같아서 노력하자(그냥 혼자 보려고 하는 코드)

class Node{
  constructor(data,next = null){
    this.data =data
    this.next=next
  }
}
class LinkedList{
  constructor(){
    this.head=null
    this.size = 0
  }
  
  addFirst(data){
    this.head = new Node(data,this.head)
    this.size++
  }
addLast(data){
  let node = new Node(data)
  let current
  if(!this.head){
    this.head = node
  }else{
    current = this.head
    
    while(current.next){
      current = current.next
    }
    current.next = node
  }
  this.size++
} // 연결 리스트 맨 마지막에 요소 추가
  
 add(index, data){
   if(index>0 && index>this.size){
     return
   }
   if(index===0){
     this.addFirst(data)
     return
   }
   const node = new Node(data)
   let current, previous
   
   current = this.head
   let count = 0
   while(count < index){
     previous = current
     count++
     current = current.next
   }
   node.next = current
   previous.next = node
   
   this.size++
 }// 특정 위치에 요소를 추가
get(index){
  if(index<0 || index >=this.size){
    return null
  }
  let current = this.head
  let counter =0
  
  while(counter<index){
      counter++
      current = current.next
  }
  return current
}// 특정 위치에 요소를 반환
set(index, e){
  if(!(index>0 && index < this.size)){
    throw new Error(`index:${index},size : ${this.size}`)
  }
  let currentNode = this.get(index)
  let oldData = currentNode.data
  currentNode.data = e
  
  return oldData
} //특정 위치에 요소를 parameter로 전달된 요소로 변환
remove(index) {
  if(index>0 && index>=this.size){
    return
  }
  let current =this.head
  let previous
  let count =0 
  if(index ===0){
    this.head = current.next
  }else{
    while(count<index){
    count++
    previous=current
    current = current.next
  }
  previous.next = current.next}
  this.size--
} //특정 위치에 요소를 삭제

printListData(){
  let current = this.head

  while(current){
   console.log(current.data)
    current = current.next
    }
  }
}

const ll = new LinkedList(0)
ll.addFirst('c')
ll.addFirst('f')
ll.addFirst('t')
ll.printListData()
console.log(ll)
console.log(ll.get(1))