博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中的链表结构—从链表中删除元素
阅读量:6154 次
发布时间:2019-06-21

本文共 2219 字,大约阅读时间需要 7 分钟。

 

1.概念

  上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remove()方法。

  从链表中删除节点的时候,需要先找到这个待删除节点的前面的节点。找到这个节点之后修改它的next属性,使其指向待删除节点的下一个节点,这样就把待删除节点给删除了,是不是很简单呢?但是问题来了,我们是不是要找到待删除节点的前面一个节点呢?这样就需要添加一个findPrevious()方法来做这件事情。

  findPrevious()方法遍历链表中的元素,检查每一个节点的下一个节点是否存储着待删除数据。如果找到,返回该节点(即前面的节点),这样就可以修改它的next属性了。findPrevious()方法定义如下:

function findPrevious(item){    var currNode =     this.head;    while ( (currNode.next != null) && (currNode.next.element != item) ){        currNode = currNode.next;    }    return currNode;}

  有了这个findPrevious()方法之后就可以考虑如何写这个remove()方法了。代码如下:

function remove(item){    var preNode = this.findPrevious(item);    if(preNode.next != null){        preNode.next = preNode.next.next;    }}

该方法中有一句preNode.next = preNode.next.next;这个使用了javascript中的对象属性,看起来有点奇怪,但是完全能说得通。

 

2.代码实现

下面的是完整的代码和测试代码:

function Node(element) {    this.element = element;    this.next = null;}function LList() {    this.head = new Node('head');    this.find = find;    this.insert = insert;    this.findPrevious = findPrevious;    this.remove = remove;    this.display = display;}function find(item) {    var currNode = this.head;    while(currNode.element != item) {        currNode = currNode.next;    }    return currNode;}//插入一个元素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;}function remove(item){    var preNode = this.findPrevious(item);    if(preNode.next != null){        preNode.next = preNode.next.next;    }}function display() {    var currNode = this.head;    while(!(currNode.next == null)) {        document.write(currNode.next.element + ' ');        currNode = currNode.next;    }}//测试程序var cities = new LList();cities.insert("Conway", "head");cities.insert("Russellville", "Conway");cities.insert("Carlise", "Russellville");cities.insert("Alma", "Carlise");cities.display();document.write('
');cities.remove('Carlise');cities.display();

最后的输出结果如下:

 

转载地址:http://dnbfa.baihongyu.com/

你可能感兴趣的文章
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>