javascript数据结构之单链表
下面是用javascript实现的单链表,但是在输出的时候insert方法中存在问题,chrome的console报错说不能读取空的属性,调试了很久都没有通过,先在这里存着,以后再来修改一下。
1 //数据结构之单链表。 2 3 var Node = function(element){ 4 this.element = element; //创建结点类型。 5 this.next = null; 6 }; 7 //链表中的next指向下一个数据,element存放数据。 8 9 var LinkedList = function(){ //创建链表LinkedList类,定义操作方法。 10 this.head = new Node("head"); //创建了头结点并且赋值为了head 11 12 //find方法,从头节结点点开始,沿着链表一直查找,直到找到与数据value相等的值才会返回该结点,没有则返回为空。 13 14 this.find = function(value){ 15 var currentNode = this.head; 16 while(currentNode.element != value){ 17 if(value == currentNode.element){ 18 return currentNode; 19 break; 20 } 21 else{ 22 currentNode = currentNode.next; 23 } 24 } 25 return null; 26 }; 27 28 //insert方法,在链表中插入一个新的数据newElem。方法内部的大致过程为:先创建一个新的结点newNode,再将这个结点插入到原有的链表中去,修改插入的结点的前后结点之间的链接关系。 29 30 this.insert = function(newElem,value){ 31 var newNode = new Node(); 32 var currentNode = this.find(value); //将新的数据newElem插入到value之后了。 33 newNode.element = newElem; 34 newNode.next = currentNode.next; 35 currentNode.next = newNode; 36 37 }; 38 39 //remove方法,删除存放数据value的结点,还得将删除的结点的前后结点衔接起来。 40 this.remove = function(value){ 41 var currentNode = this.head; 42 while(currentNode.next.next != value){ 43 currentNode = currentNode.next; //先找到删除数据的所在结点的前一个结点,然后将删除结点的前后两个结点相链接即可。 } 44 currentNode.next = currentNode.next.next; 45 } 46 }; 47 48 //show方法,展示链表里的所有数据。 49 this.show = function(){ 50 var currentNode = this.head, 51 result; 52 currentNode = currentNode.next; //因为头结点的数据element为空,所以输出直接跳过头结点。 53 while(currentNode.next != null){ 54 result += currentNode.element; 55 currentNode = currentNode.next; 56 } 57 return result; 58 59 }; 60 61 }; 62 63 64 65 var list = new LinkedList(); 66 list.insert("a","head"); 67 list.insert("b","a"); 68 list.insert("c","b"); 69 console.log(list.show());
少一些功利主义的追求,多一些不为什么的坚持!