-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathdoublelinked.js
More file actions
98 lines (78 loc) · 2.52 KB
/
doublelinked.js
File metadata and controls
98 lines (78 loc) · 2.52 KB
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
function DoubleLinkedList() {
this._length = 0;
this._head = null;
this._tail = null;
this.add= function (data){
//create a new item object, place data in
var node = {
data: data,
next: null,
prev: null
};
//special case: no items in the list yet
if (this._length === 0) {
this._head = node;
this._tail = node;
} else {
//attach to the tail node
this._tail.next = node;
node.prev = this._tail;
this._tail = node;
}
//don't forget to update the count
this._length++;
};
this.remove= function(index){
//check for out-of-bounds values
if (index > -1 && index < this._length){
var current = this._head,
i = 0;
//special case: removing first item
if (index === 0){
this._head = current.next;
/*
* If there's only one item in the list and you remove it,
* then this._head will be null. In that case, you should
* also set this._tail to be null to effectively destroy
* the list. Otherwise, set the previous pointer on the
* new this._head to be null.
*/
if (!this._head){
this._tail = null;
} else {
this._head.prev = null;
}
//special case: removing last item
} else if (index === this._length -1){
current = this._tail;
this._tail = current.prev;
this._tail.next = null;
} else {
//find the right location
while(i++ < index){
current = current.next;
}
//skip over the item to remove
current.prev.next = current.next;
}
//decrement the length
this._length--;
//return the value
return current.data;
} else {
return null;
}
};
//more methods here
}
var mydlink = new DoubleLinkedList();
console.log(mydlink._length);
mydlink.add('first');
mydlink.add('second');
mydlink.add('third');
console.log(mydlink._head);
console.log(mydlink._tail);
console.log(mydlink._length);
mydlink.remove(1);
console.log(mydlink._length);
console.log(mydlink._head.next);