let dummy = new Node(null) // reference
dummy.next = this.head;
let prev = dummy;
prev.next = current.next
prev, dummy는 둘다 new Node의 reference로
prev.next가 바뀌면 new Node자체의 next가 바뀌는거이므로 dummy.next도 같이 바뀐다
문제: 주어진 링크드리스트에서 val와 같은 element들을 삭제하여라.
예제 : 1→3→5→7→3→1 , val = 3
답 : 1→5→7→
removeEle_iterative(e) { if (!this.head) return null; let dummy = new Node(null); dummy.next = this.head; let prev = dummy; let curr = this.head; // prev.next = this.head; while (curr) { if (curr.value === e) { prev.next = curr.next; // curr = curr.next; } else { // curr = curr.next; prev = curr; } curr = curr.next; } return dummy.next; } }```
currNode.value = 타겟일때 nextNode를 바로 리턴
아니면 currNode.next = nextNode로 연결해주고 currNode리턴
removeEle_recursive(currNode, e) { if (!currNode) return null; let nextNode = this.removeEle_recursive(currNode.next, e); if (currNode.value === e) { return nextNode; } else { currNode.next = nextNode; return currNode; } }```
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
function printNodes(node) {
let curr = node;
while (curr) {
console.log(curr.value);
curr = curr.next;
}
}
class LinkedList {
constructor() {
this.head = null;
}
addNode(value) {
const newNode = new Node(value);
if (!this.head) {
this.head = newNode;
} else {
let curr = this.head;
while (curr.next) {
curr = curr.next;
}
curr.next = newNode;
}
}
removeEle_iterative(e) {
if (!this.head) return null;
let dummy = new Node(null);
dummy.next = this.head;
let prev = dummy;
let curr = this.head;
// prev.next = this.head;
while (curr) {
if (curr.value === e) {
prev.next = curr.next;
// curr = curr.next;
} else {
// curr = curr.next;
prev = curr;
}
curr = curr.next;
}
return dummy.next;
}
// 타겟일때 nextNode를 바로 리턴
// 타겟이 아니면 currNode.next = nextNode로 연결해주고 currNode리턴
removeEle_recursive(currNode, e) {
if (!currNode) return null;
let nextNode = this.removeEle_recursive(currNode.next, e);
if (currNode.value === e) {
return nextNode;
} else {
currNode.next = nextNode;
return currNode;
}
}
}
const linkedList = new LinkedList();
linkedList.addNode(3);
linkedList.addNode(1);
linkedList.addNode(3);
linkedList.addNode(5);
linkedList.addNode(7);
linkedList.addNode(3);
linkedList.addNode(1);
console.log(linkedList);
printNodes(linkedList.removeEle_iterative(3)); // 1571
printNodes(linkedList.removeEle_recursive(linkedList.head, 1)); // 33573