标签:lin isp 之间 设计 就会 数据结构与算法 原来 删除节点 语言
<script type="text/javascript"> /** * Node类: * element 用来保存节点上的数据 * next 用来保存指向下一个节点的链接 */ function Node(element){ this.element = element; this.next = null; } /** * LinkedList类 * LList 类提供了对链表进行操作的方法。 * 包括插入删除节点、在列表中查找给定的值。 * 链表只有一个属性,那就是使用一个Node 对象来保存该链表的头节点。 * * head 节点的next 属性被初始化为null * 当有新元素插入时,next 会指向新的元素,所以在这里我们没有修改next 的值。 */ function LList(){ this.head = new Node("head"); this.find = find; this.insert = insert; this.remove = remove; this.display = display; this.findPrevious = findPrevious; } /** * 遍历链表,查找给定数据。 * 如果找到数据,该方法就返回保存该数据的节点 */ function find(item){ var currNode = this.head; while(currNode.element != item){ currNode = currNode.next; } return currNode; } /* * 插入新节点 * 在item元素(已知节点)后面插入newElement */ function insert(newElement, item){ var newNode = new Node(newElement); var current = this.find(item); newNode.next = current.next; current.next = newNode; } /** * 查找待删除元素的上一个节点 * 该方法遍历链表中的元素,检查每一个节点的下一个节点中是否存储着待删除数据。 * 如果找到,返回该节点(即“前一个”节点) */ function findPrevious(item){ var currNode = this.head; while(currNode.next!=null && currNode.next.element != item){ currNode = currNode.next; } return currNode; } /** * 从链表中删除节点 * 需要先找到待删除节点前面的节点。 * 找到这个节点后,修改它的next 属性,使其不再指向待删除节点,而是指向待删除节点的下一个节点。 */ function remove(item){ var prevNode = this.findPrevious(item); if(prevNode.next != null){ prevNode.next = prevNode.next.next; } } /* * 显示链表中的元素 */ function display(){ var currNode = this.head; while(currNode.next != null){ console.log(currNode.next.element); currNode = currNode.next; } } //测试代码 var cities = new LList(); cities.insert("Conway", "head"); cities.insert("Russellville", "Conway"); cities.insert("Carlisle", "Russellville"); cities.insert("Alma", "Carlisle"); cities.display(); cities.remove("Carlisle"); cities.display(); </script>
打印:
标签:lin isp 之间 设计 就会 数据结构与算法 原来 删除节点 语言
原文地址:http://www.cnblogs.com/tenWood/p/7231923.html