zoukankan      html  css  js  c++  java
  • JS-常用的数据结构之链表的实现

      1 function LinkedList(){
      2     var Node = function(element){
      3         this.element = element;
      4         this.next = null;
      5     };
      6     
      7     var length = 0;
      8     var head = null
      9    
     10     this.append = function(element){
     11        // 创建一个节点
     12        var node = new Node(element);
     13        var current = null;
     14        
     15        if (head == null){
     16            head = node;
     17        }else{
     18            current = head;
     19            while(current.next){
     20                current = current.next;
     21            }
     22            //找到最后一项,将其next赋为node,建立连接
     23            current.next = node;
     24        }
     25        length++;
     26     } //向链表尾部添加一个新的项
     27 
     28     this.insert = function (position, element) {
     29         // 检查越界
     30         if(position >= 0 && position < length){
     31             var node = new Node(element);
     32             var current = head;
     33             var previous = null
     34             var index = 0
     35  
     36             if(position === 0){
     37                 node.next = current;
     38                 head = node;
     39             }else{
     40                 // 1 从前往后遍历找到position
     41                 while(index < position){
     42                    previous = current;
     43                    current = previous.next;
     44                    index++;
     45                 }
     46 
     47                 //通过改变指针,将node链接在previous和current之间
     48                 previous.next = node;
     49                 node.next = current;
     50                
     51                 // 2 经验证1和2没有区别
     52                 //while (index++ < position) {
     53                 //    previous = current;
     54                 //    current = current.next;
     55                 //}
     56                 //通过改变指针,将node链接在previous和current之间
     57                 //node.next = current;
     58                 //previous.next = node;
     59                 return true;
     60             }
     61         }else{
     62             return false;
     63         }
     64     }; //向链表特定位置插入一个新的项
     65 
     66     this.removeAt = function (position) {
     67         if(position > -1 && position < length){
     68             var current = head;
     69             var previous = null;
     70             var index = 0;
     71 
     72             if (position == 0){
     73                 head = current.next;
     74             }else{
     75                 while(index < position){
     76                     previous = current;
     77                     current = current.next;
     78                     index++;
     79                 }
     80                 previous.next = current.next;
     81             }
     82             length--;
     83             return current.element;
     84         }else{
     85             return null;
     86         }
     87     }; //从链表特定位置移除一项
     88     this.remove = function (element) {
     89         var index = this.indexOf(element);
     90         this.removeAt(index);
     91     }; //从链表中移除一项
     92     this.indexOf = function (element) {
     93         var current = head;
     94         var index = 0;
     95         while(current){
     96             if (current.element === element){
     97                 return index;
     98             }
     99             current = current.next;
    100             index++;
    101         }
    102         return -1; 
    103     }; //返回元素在链表中的索引,如果没有则返回-1
    104     this.isEmpty = function () {
    105         return length === 0;
    106     }; //判断链表是否为空
    107     this.size = function () {
    108         return length;
    109     }; //返回链表包含元素个数
    110     this.getHead = function () {
    111         return head;
    112     }; //返回链表第一个元素
    113     this.toString = function () {
    114         var current = head;
    115         var str = "";
    116         while(current){
    117             current = current.next;
    118             str += "," + current.element;
    119         }
    120         return str.slice(1);
    121     }; //只输出元素的值
    122     this.print = function () {
    123         console.log(this.toString());
    124     }; //打印元素的值
    125 }
  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/orxx/p/10279509.html
Copyright © 2011-2022 走看看