공부하고 참고하면서 몇가지 문법들 작성하였습니다. 아직 코테를 풀기에는 부족한거같아서 노력하자(그냥 혼자 보려고 하는 코드)
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))
'CS' 카테고리의 다른 글
[자료구조] Queue (0) | 2023.08.31 |
---|---|
[자료구조] Stack - 1 (0) | 2023.08.30 |
[알고리즘] 문제 해결 패턴 - 기본: Divied and Conquer (0) | 2023.08.28 |
[알고리즘] 문제 해결 패턴 - 기본: Slide Window (0) | 2023.08.27 |
[자료구조] Linked list - 1 (0) | 2023.08.26 |