/* 五种常见时间复杂度 复杂度用 大 O 记法 来描述(大 O 记法是描述算法复杂度的符号) O(1) 常数复杂度,最快速的算法。 求数组前 10000 个元素的和 字典和集合的存取都是 O(1) 数组的存取是 O(1) O(lgN) 对数复杂度 假设有一个有序数组,以二分法查找 O(n) 线性复杂度 假设有一个数组,以遍历的方式在其中查找元素 O(NlogN) 求两个数组交集,其中一个是有序数组 假设 A 数组的长度是 M, 无序 假设 B 数组的长度是 N, 有序 A 数组每一个元素都要在 B 数组中进行查找操作 每次查找如果使用二分法则复杂度是 lgN 加起来就是 M * lgN 所以时间复杂度是 NlogN O(N²) 平方复杂度 求两个无序数组的交集 假设 A 数组的长度是 M, 无序 假设 B 数组的长度是 N, 无序 A 数组每一个元素都要在 B 数组中进行查找操作 每次查找只能使用遍历操作, 所以每次查找都是 N 加起来就是 M * N 所以时间复杂度是 N² */
// 在链表末尾增加一个元素 LinkedList.prototype.append = function(e) { var node = newNode(e) var n = this.head while(n.next != null) { n = n.next } n.next = node // this._length++ }
// 返回一个元素的 index LinkedList.prototype.indexOf = function(e) { var index = -1 var n = this.head var i = 0 while(n.next != null) { if (e === n.element) { index = i break } n = n.next i++ } return index }