자료구조 & 알고리즘
[자료구조] 선형자료구조 연결리스트(Linked List) 원하는 위치에 노드(Node) 추가하기
진기명기
2023. 3. 8. 18:12
🫠 선형자료구조 - 연결리스트(Linked List) 원하는 위치에 노드(Node) 추가하기
❗️ 연결리스트에 노드 추가하는 또 다른 방법 확인 ⬇️⬇️⬇️
[자료구조] 선형자료구조 연결리스트(Linked List)에 노드(Node) 추가하기
🫠 선형자료구조 - 연결리스트(Linked List)에 노드 추가하기 ❗️prototype을 이용한 노드와 연결리스트 생성 방법 먼저 확인하고 오자! https://cyjcyj.tistory.com/95 [자료구조] 선형자료구조 프로토타입
cyjcyj.tistory.com
🫠 연결리스트 원하는 위치에 노드 추가하기
> insert 메서드
/* 노드 중간에 삽입하기 */
LinkedList.prototype.insert = function(value, position = 0){
// position이 음수거나 해당 연결리스트보다 길이가 클 경우는 아래 코드를 작동하지 말고, false 리턴
if(position < 0 || position > this.length){
return false
}
// 새로운 노드 생성, 현재 노드 위치는 this.head가 가리키는 노드(초기화), prev(이전 노드값을 저장할 변수)
let node = new Node(value), current = this.head, index = 0, prev
if(position === 0){ // 만약 위치 0에 node를 새로 추가할 경우
node.next = current // 새로 추가하는 node의 next에 현재 current(node)를 넣어줘라 (즉, 위치 1에)
this.head = node
} else {
while(index++ < position){ // position보다 index++의 결과가 더 작을때까지
prev = current // current에 prev를 추가해줘라
current = current.next // current는 current.next로 옮겨줘라
}
// 새로운 노드를 넣을 위치를 만나면 while문을 빠져나와 아래 실행
node.next = current // current와 prev 사이에 새로운 node가 들어옴(기준 : node)
prev.next = node
}
this.length++
return true
}
👉🏻 output : 설명 주석 처리 확인
✅ insert 메서드의 매개변수 중 position에 기본값 0을 주었다. (만약 position을 따로 지정하지 않았을 경우 대비)
✅ 이전 노드를 저장하는 prev 변수와 현재 어느 위치에 있는지 확인해 주는 Index를 추가하였다.
❗️ 새로운 연결리스트를 생성하여 insert 메서드를 사용해 보자
let link3 = new LinkedList()
link3.insert(10)
link3.insert(50)
link3.insert(100)
link3.printNode() // 100 -> 50 -> 10 -> null
link3.insert(70,1)
link3.printNode() // 100 -> 70 -> 50 -> 10 -> null
link3.insert(30,3)
link3.printNode() // 100 -> 70 -> 50 -> 30 -> 10 -> null
console.log(link3.size()) // 5
👉🏻 output : 주석 처리 확인
✅ 노드 10, 50, 100은 따로 position을 주지 않았기 때문에 순서대로 위치 0에 들어간 것을 확인할 수 있다.
✅ insert(70,1) : data 70을 가진 노드를 위치 1에 추가한 것 (원래 [0] = 100, [1] = 50, [2] = 10)
✅ insert(30, 3)도 마찬가지로 추가