자료구조 & 알고리즘

[자료구조] 선형자료구조 연결리스트(Linked List) 노드(Node) 위치값으로 삭제하기

진기명기 2023. 3. 8. 19:05
🫠 선형자료구조 - 연결리스트(Linked List) 내에 있는 노드(node) 위치값으로 삭제하기

 

❗️ 노드 value값으로 삭제하는 방법도 확인! 

❗️ link3 연결리스트를 이어서 작성(두 번째 링크 확인하기)

https://cyjcyj.tistory.com/99

 

[자료구조] 선형자료구조 연결리스트(Linked List) 노드(Node) 삭제하기

🫠 선형자료구조 - 연결리스트(Linked List) 내에 있는 노드(node) value값으로 삭제하기 ❗️ 지난 시간에 포스팅한 아래 링크에서 이어서 작성(확인하자!) ⬇️⬇️⬇️ https://cyjcyj.tistory.com/98 [자료

cyjcyj.tistory.com

https://cyjcyj.tistory.com/98

 

[자료구조] 선형자료구조 연결리스트(Linked List) 원하는 위치에 노드(Node) 추가하기

🫠 선형자료구조 - 연결리스트(Linked List) 원하는 위치에 노드(Node) 추가하기 ❗️ 연결리스트에 노드 추가하는 또 다른 방법 확인 ⬇️⬇️⬇️ https://cyjcyj.tistory.com/97 [자료구조] 선형자료구조

cyjcyj.tistory.com

 

 

 


🫠 연결리스트(Linked List) 내에 존재하는 노드(node)를 위치값을 통해 삭제하기

> removeAt 메서드

/* 노드의 위치 값을 받아 삭제하기 */

LinkedList.prototype.removeAt = function(position = 0){

  // 위치값이 0보다 작거나 연결리스트보다 길이가 길 경우 null
  if(position < 0 || position >= this.length){
    return null
  }

  let current = this.head, index = 0, prev

  // 삭제하려는 노드의 위치가 0이라면
  if(position === 0){
    this.head = current.next
  } else{ // while문이 돌면서 증가하는 index가 해당 위치값보다 작을때까지
    while(index++ < position){
      prev = current
      current = current.next
    }

    // prev - current(remove해야할 대상) - current.next인 경우
    prev.next = current.next
  }

  this.length--
  return current.data
  
}
👉🏻 output : 설명 주석 처리 확인
✅ 삭제하려는 해당 노드의 위치값을 받아 연결리스트 내에서 찾아 삭제하는 removeAt 메서드를 작성하였다.

 

 

 

❗️ removeAt을 통해 원하는 위치값의 노드를 삭제해 보자

link3.printNode() // 100 -> 70 -> 50 -> 30 -> 10 -> null
console.log(link3.removeAt(1000)) // null

link3.removeAt(4)
link3.printNode() // 100 -> 70 -> 50 -> 30 -> null

link3.removeAt(2)
link3.printNode() // 100 -> 70 -> 30 -> null

link3.removeAt(0)
link3.printNode() // 70 -> 30 -> null

console.log(link3.size()) // 2
👉🏻 output : 주석 처리 확인
✅ 1000을 삭제하려 했으나, 연결리스트 내에 해당 node가 없기 때문에 null이 반환되었다.
✅ 10 -> 50 -> 100 순서대로 removeAt을 통해 삭제된 것을 확인할 수 있다.