JavaScript数据结构之双向链表和双向循环链表的实现
双向链表和普通链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素。
双向链表提供了两种迭代列表的方法:从头到尾,或者反过来。我们也可以访问一个特定节点的下一个或前一个元素。在单向链表中,如果迭代列表时错过了要找的元素,就需要回到列表起点,重新开始迭代。这是双向链表的一个优点。
双向链表:单向链表只能向着一个方向遍历链表节点,而在节点指针域中增加了前向指针的双向链表,则可以向着两个方向遍历节点。这使得双向链表也可以在任何一个节点遍历整个链表。
functionDoublyLinkedList(){ varNode=function(element){ this.element=element; this.next=null; this.prev=null; }; varlength=0, head=null, tail=null; this.append=function(element){ varnode=Node(element), current, previous; if(!head){ head=node; tail=node; }else{ current=head; while(current){ previous=current; current=current.next; } node.next=current; current.prev=node; previous.next=node; node.prev=previous; } length++; returntrue; } this.insert=function(position,element){ if(position>-1&&position-1&&position 双向循环链表:将双向链表的头尾指针相连,就构成了双向循环链表。这种链表从任意一个节点都可以同时向两个方向进行节点遍历,查询节点的速度也是最快的。
/*双向循环链表*/ functionDoublyCircularLinkedList(){ varNode=function(element){ this.element=element; this.next=null; this.prev=null; }; varlength=0, head=null, tail=null; this.append=function(element){ varnode=newNode(element), current, previous; if(!head){ head=node; tail=node; head.prev=tail; tail.next=head; }else{ current=head; while(current.next!==head){ previous=current; current=current.next; } current.next=node; node.next=head; node.prev=current; }; length++; returntrue; }; this.insert=function(position,element){ if(position>=0&&position<=length){ varnode=newNode(element), index=0, current=head, previous; if(position===0){ if(!head){ node.next=node; node.tail=node; head=node; tail=node; }else{ current.prev=node; node.next=current; head=node; node.prev=tail; } }elseif(position===length){ current=tail; current.next=node; node.prev=current; tail=node; node.next=head; }else{ while(index++-1&&position 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。