Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. function List() {
  2. this.length = 0;
  3. this._head = null;
  4. this._tail = null;
  5. }
  6.  
  7. List.prototype = {
  8.  
  9. head: function() {
  10. if (this.length > 0) {
  11. return this._head;
  12. } else {
  13. throw new Error("List has zero length.");
  14. }
  15. },
  16.  
  17. tail: function() {
  18. if (this.length > 0) {
  19. return this._tail;
  20. } else {
  21. throw new Error("List has zero length.");
  22. }
  23. },
  24.  
  25. append: function(value) {
  26. var node = {
  27. value: value,
  28. next: null,
  29. prev: null,
  30. }
  31. if (this.length == 0) {
  32. this._head = node;
  33. this._tail = node;
  34. } else {
  35. this._tail.next = node;
  36. node.prev = this._tail;
  37. this._tail = node;
  38. }
  39. this.length++;
  40. return this;
  41. },
  42.  
  43. deleteAt: function(index) {
  44. if (index < this.length) {
  45.  
  46. var node = this._head;
  47. var i = 0;
  48. while (i < index) {
  49. node = node.next;
  50. i++;
  51. }
  52. while (i != this.length - 1) {
  53. node.value = node.next.value;
  54. this._tail = node;
  55. node = node.next;
  56. i++;
  57. }
  58. node.value = null;
  59. node.next = null;
  60. this.length--;
  61. return this;
  62. } else {
  63. throw new Error("The index of the item that you have selected more than the length of the list.");
  64. }
  65. },
  66.  
  67. at: function (index) {
  68. return this._at(index).value;
  69. },
  70.  
  71. _at: function(index) {
  72. if (this.length < index) {
  73. throw new Error("The index of the item that you have selected more than the length of the list.");
  74. } else {
  75. var node = this._head;
  76. var i = 0;
  77. while (i != index) {
  78. node = node.next;
  79. i++;
  80. }
  81. return node;
  82. }
  83. },
  84.  
  85. insertAt: function(index, value) {
  86. if (index < this.length) {
  87. var node = {
  88. value: value,
  89. next: null,
  90. prev: null,
  91. }
  92.  
  93. var nodeCur = this._at(index);
  94. var nodePrev = nodeCur.prev;
  95. var nodeNext = nodeCur.next;
  96.  
  97. node.prev = nodePrev;
  98. node.next = nodeNext;
  99. nodePrev.next = node;
  100. nodeNext.prev = node;
  101.  
  102. this.length++;
  103.  
  104. return this;
  105. } else {
  106. throw new Error("The index of the item that you have selected more than the length of the list.");
  107. }
  108. },
  109.  
  110. reverse: function() {
  111.  
  112. var node_buf = {
  113. value: null,
  114. next: null,
  115. prev: null,
  116. }
  117.  
  118. var node_head = this._head;
  119. var node_tail = this._tail;
  120.  
  121. var i = 0;
  122.  
  123. while (i < Math.floor(this.length / 2)) {
  124. node_buf.value = node_tail.value;
  125. node_tail.value = node_head.value;
  126. node_head.value = node_buf.value;
  127. node_head = node_head.next;
  128. node_tail = node_tail.prev;
  129. i++;
  130. }
  131.  
  132. return this;
  133. },
  134.  
  135. each: function(callback) {
  136. var node = this._head;
  137. var i = 0;
  138. while (i < this.length) {
  139. node.value = callback(node.value);
  140. i++;
  141. node = node.next;
  142. }
  143. return this;
  144. },
  145.  
  146. indexOF: function(value) {
  147. var node = this._head;
  148. var i = 0;
  149. while (i != this.length) {
  150. if (node.value == value) {
  151. return i;
  152. }
  153. node = node.next;
  154. i++;
  155. }
  156. throw new Error("Value " + value + " is not found.");
  157. }
  158.  
  159. };
  160.  
  161. function List() {
  162. this.length = 0;
  163. this._next = this._prev = this;
  164. }
  165.  
  166. List.prototype.append = function(value) {
  167. this._prev = this._prev._next = {
  168. value: value,
  169. _next: this,
  170. _prev: this._prev
  171. };
  172. this.length--;
  173. return this;
  174. };
  175.  
  176. var i = 0;
  177. while (i < …) {
  178. i++;
  179. }
  180.  
  181. List.prototype.deleteAt = function(index) {
  182. var nodeToDelete = this._at(index);
  183. nodeToDelete._next._prev = nodeToDelete._prev;
  184. nodeToDelete._prev._next = nodeToDelete._next;
  185. this.length--;
  186. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement