-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoublly.html
109 lines (93 loc) · 2.82 KB
/
doublly.html
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class Node {
constructor(data) {
this.data = data;
this.next = null;
this.prev = null;
}
}
class DoublyLinkedList {
constructor() {
this.head = null;
this.tail = null;
}
append(data) {
let newNode = new Node(data);
if (this.head === null) {
this.head = newNode;
this.tail = newNode;
}
else {
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode
}
}
prepend(data) {
let newNode = new Node(data);
if (this.head === null) {
this.head = newNode;
this.tail = newNode;
}
else {
newNode.next = this.head;
this.head.prev = newNode;
this.head = newNode;
}
}
delete(data) {
if (this.head === null) return console.log("Empty");
if (this.head.data === data) {
this.head = this.head.next;
if (this.head !== null) {
this.head.prev = null;
}
else {
this.tail = null;
}
return;
}
let current = this.head;
while(current !==null && current.data !== data){
current = current.next;
}
if(current !== null){
if(current.next !== null){
current.next.prev = current.prev;
}
else {
this.tail = current.prev;
}
if(current.prev !== null){
current.prev.next = current.next;
}
}
}
toArray(){
let elements = [];
let current = this.head;
while(current !== null){
elements.push(current.data);
current = current.next;
}
return elements;
}
}
let list = new DoublyLinkedList();
list.append(10);
list.append(20);
list.prepend(200)
console.log(list.toArray())
list.delete(20);
console.log(list.toArray())
</script>
</body>
</html>