链表(Linked-list)(3)

还有一些反向显示链表 dispReverse,查找链表最后一个元素 findLast 等方法,相信你已经有了思路,这里我给出一个基本双向链表的完成代码,供大家参考。

//节点 function Node(element) { this.element = element; //当前节点的元素 this.next = null; //下一个节点链接 this.previous = null; //上一个节点链接 } //链表类 function LList () { this.head = new Node( 'head' ); this.find = find; this.findLast = findLast; this.insert = insert; this.remove = remove; this.display = display; this.dispReverse = dispReverse; } //查找元素 function find ( item ) { var currNode = this.head; while ( currNode.element != item ){ currNode = currNode.next; } return currNode; } //查找链表中的最后一个元素 function findLast () { var currNode = this.head; while ( !( currNode.next == null )){ currNode = currNode.next; } return currNode; } //插入节点 function insert ( newElement , item ) { var newNode = new Node( newElement ); var currNode = this.find( item ); newNode.next = currNode.next; newNode.previous = currNode; currNode.next = newNode; } //显示链表元素 function display () { var currNode = this.head; while ( !(currNode.next == null) ){ console.debug( currNode.next.element ); currNode = currNode.next; } } //反向显示链表元素 function dispReverse () { var currNode = this.findLast(); while ( !( currNode.previous == null )){ console.log( currNode.element ); currNode = currNode.previous; } } //删除节点 function remove ( item ) { var currNode = this.find ( item ); if( !( currNode.next == null ) ){ currNode.previous.next = currNode.next; currNode.next.previous = currNode.previous; currNode.next = null; currNode.previous = null; } } var fruits = new LList(); fruits.insert('Apple' , 'head'); fruits.insert('Banana' , 'Apple'); fruits.insert('Pear' , 'Banana'); fruits.insert('Grape' , 'Pear'); console.log( fruits.display() ); // Apple // Banana // Pear // Grape console.log( fruits.dispReverse() ); // Grape // Pear // Banana // Apple

循环链表

循环链表和单链表相似,节点类型都是一样,唯一的区别是,在创建循环链表的时候,让其头节点的 next 属性执行它本身,即

head.next = head;

这种行为会导致链表中每个节点的 next 属性都指向链表的头节点,换句话说,也就是链表的尾节点指向了头节点,形成了一个循环链表,如下图所示:

链表(Linked-list)

 
循环链表

原理相信你已经懂了,循环链表这里就不贴代码了,相信你自己能独立完成!

至此,我们对链表有了比较深刻的认识,如果想让我们的链表更加健全,我们还可发挥自己的思维,给链表添加比如向前移动几个节点,向后移动几个节点,显示当前节点等方法,大家一起加油!

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bf453bf648259a24aa85a4e83f091908.html