-
Notifications
You must be signed in to change notification settings - Fork 33
/
120-Stack.js
70 lines (54 loc) · 1.5 KB
/
120-Stack.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
Ordenar un stack de forma que los elementos mas pequenios queden arriba de todo del Stack (Pila). Se puede usar un Stack adicional pero no se puede copiar elementos de uno a otro.
* Input: `(tope) 5-1-4-2`
* Output: `(tope) 1-2-4-5`
*/
// ----------- Implementacion con Nodos -------------------
class Node {
constructor (data, nextNode) {
this.data = data;
this.next = nextNode;
}
}
class Stack {
constructor() {
this.top = null;
}
// Agrega un elemento a la cima de la pila
push(item) {
let newTop = new Node(item, this.top);
this.top = newTop;
}
// Elimina el primer elemento de la pila, el de la cima y devuelve su valor
pop() {
if (this.isEmpty()) return;
let aux = this.top;
this.top = this.top.next;
return aux.data;
}
// Retorna el elemento de la cima de la pila sin eliminarlo
peek() {
return this.top.data;
}
isEmpty() {
return this.top == null;
}
}
// --------------------------
const orderStack = (stack) => {
const stackOrdenado = new Stack();
while (!stack.isEmpty()) {
let current = stack.pop();
while (!stackOrdenado.isEmpty() && current > stackOrdenado.peek()){
stack.push(stackOrdenado.pop());
}
stackOrdenado.push(current);
}
return stackOrdenado;
}
const testStack = new Stack();
testStack.push(2);
testStack.push(4);
testStack.push(1);
testStack.push(5);
console.log(orderStack(testStack));