首页
学习
活动
专区
圈层
工具
发布

OpenHarmony中的HDF单链表及其迭代器

单链表是链表中的一种,本文描述OpenAtom OpenHarmony(以下简称“OpenHarmony”)中HDF软件模块自己定义的单链表,并学习其设计和实现方法。...迭代器简介迭代器是伴随集合概念产生的,意思是依次访问集合中的每一个元素,迭代器提供访问这些元素的方法。对于单链表而言,链表中的每一个节点都是一个元素,所有的节点组成集合。...通过迭代器,遍历元素变得简单直接(将遍历算法封装在迭代器中),不用每次迭代都考虑数据结构细节(数据结构种类繁多,单链表只是其中之一)。...直观上看,除了第一个节点,其它节点都可以通过next访问到,第一个节点通过root访问到。那实际上会不会就是这么简单呢?其实不然,因为需要考虑到节点删除的因素。...所以这个时候我们必须借助操作curr之前还在链表上的上一个节点,即上图的prev节点,通过其next成员,找到需要迭代处理的下一个节点。所以,迭代过程中需要记录prev、curr这2个节点的位置信息。

10420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java中Iterable接口的使用,实现一个单链表的迭代器

    单链表实现: public class MyLinkedList { private static class Entry{ private E value;...iterator()的返回值会返回一个迭代器对象,这个迭代器对象可以作为一个工具来遍历集合类中的对象。...此外,迭代器更是设计模式,如对图的遍历可以实现一个图迭代器,简化代码,将遍历的思想抽象出来。 自己实现一个可以遍历上述单链表的迭代器,这个迭代器需要实现Iterator接口中的方法。...主要包括以下三个方法: (1)是否存在下一个对象元素 (2)返回下一个对象元素 (3)删除集合中的当前迭代器指向的对象元素 public class MyLinkedList ...show()方法的功能是相同的,但是迭代器为遍历集合对象元素提供了一种统一的方法,此外也可以使用迭代器做更多的事情。

    69410

    简单说 JavaScript中的事件委托(上)

    https://blog.csdn.net/FE_dev/article/details/78821578 说明 这篇文章说JavaScript中的事件委托,这次先说一些比较基本的知识。...事件:JavaScript 侦测到的行为就是事件,比如鼠标点击、某个键盘的键被按下、元素获得焦点。 委托:就是把原来自己做的事,交给别人做。...,并不在生成的元素上绑定事件,而是在生成元素的父元素上绑定事件,因为父元素是一直存在的,所以绑定的事件就可以生效。...总结 这篇文章是比较基础的,还有一些东西没有说,比如文中说 事件委托的实现 的时候,举的例子比较简单,监听的 li 里面没有子元素,如果存在子元素时,那点击子元素 事件就不会触发,那怎么办呢?...还有 JQuery中的事件委托 又是怎么做的呢? 看这里 简单说 JavaScript中的事件委托(下)

    87120

    反转链表

    题目描述 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?...prev; prev = cur; cur = next; } return prev; } }; 拓展 通过单链表的定义可以得知...,单链表也是递归结构,因此,也可以使用递归的方式来进行reverse操作。...由于单链表是线性的,使用递归方式将导致栈的使用也是线性的,当链表长度达到一定程度时,递归会导致爆栈,因此,现实中并不推荐使用递归方式来操作链表。...描述 除第一个节点外,递归将链表reverse 将第一个节点添加到已reverse的链表之后 这里需要注意的是,每次需要保存已经reverse的链表的头节点和尾节点 C++实现 // 普通递归 class

    54920

    递归反转链表一部分

    转载自labuladong的算法小抄,go语言描述 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够递归实现呢?...如果你还不会递归地反转单链表也没关系,本文会从递归反转整个单链表开始拓展,只要你明白单链表的结构,相信你能够有所收获。...但是我们的递归解法不用一个 for 循环,纯递归实现反转。 迭代实现思路看起来虽然简单,但是细节问题很多的,反而不容易写对。相反,递归实现就很简洁优美,下面就由浅入深,先从反转整个单链表说起。...2、当链表递归反转之后,新的头结点是 last,而之前的 head 变成了最后一个节点,别忘了链表的末尾要指向 null: head.next = nil 理解了这两点后,我们就可以进一步深入了,接下来的问题其实都是在这个算法上的扩展...处理看起来比较困难的问题,可以尝试化整为零,把一些简单的解法进行修改,解决困难的问题。 值得一提的是,递归操作链表并不高效。

    94420

    链表+6道前端算法面试高频题解

    可见链表对内存的要求降低了,但是随机访问的性能就没有数组好了,需要 O(n) 的时间复杂度。 下图中展示了单链表及单链表的添加和删除操作,其实链表操作的本质就是处理链表结点之间的指针。...链表的结点结构由数据域和指针域组成,在 JavaScript 中,以嵌套的对象形式实现。...,是我们遍历链表的起点 尾结点:尾结点的指针不是指向下一个结点,而是指向一个空地址 NULL 单链表:单链表是单向的,它的结点只有一个后继指针 next 指向后面的结点,尾结点指针指向空地址 循环链表:...回到本题的递归解法: 写递归解法的话,老套路,先明确终止条件,链表中没有节点或只有一个节点时无法进行交换。 接下来递归的进行两两交换节点并更新指针关系。 返回新链表的头节点 newHead。...开始迭代,记录 next 指针留备后用,反转指针。 推进指针继续迭代,最后返回新的链表头节点 prev。

    35530

    单链表逆序

    2、 单链表逆序 第二个题目是很经典的“单链表逆序”问题。...如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示: ?...图(4)经过第三次迭代后的状态 此时可以看出,在图(4)的基础上再进行一次迭代就可以完成链表的逆序,因此循环迭代的终止条件就是当前的head指针是NULL。...= next; 循环终止条件是: head == NULL 根据以上分析结果,逆序单链表的循环算法如下所示: 61 LINK_NODE *ReverseLink(LINK_NODE *head)...()对问题进行求解,将链表分为当前表头节点和其余节点,递归的思想就是,先将当前的表头节点从链表中拆出来,然后对剩余的节点进行逆序,最后将当前的表头节点连接到新链表的尾部。

    81730

    终于上线了,速来!

    除了数据结构操作的可视化,还支持用 @visualize 标签 对递归算法进行可视化,大幅降低读者理解递归算法的难度。 下面就简单介绍一下可视化面板编辑器的使用方法。...操作内置数据结构 类似数组、哈希表等 JavaScript 内置的数据结构,就正常初始化和操作它们即可,比如: 需要着重讲的是 力扣/LeetCode 中一些特殊的数据结构,比如单链表ListNode和二叉树...操作单链表 首先说一下单链表,你可以用ListNode.create方法快速创建一条单链表,这是一个简单的例子: /** * Definition for singly-linked list....fib函数开启递归树可视化功能,每次递归调用会被可视化为递归树上的一个节点,函数参数中的n的值会显示在节点上。...2、@visualize注释必须写在函数定义的上一行,否则无法追踪递归过程。

    26410

    两种方法求解链表高频面试题之单链表反转

    单链表反转 单链表反转这道题可谓是链表里面的高频问题了,差不多可以说只要被问到链表,就会问单链表反转。 今天我们就一起来看下。...题目链接:https://leetcode-cn.com/problems/reverse-linked-list/ 点击文末的阅读原文也可到达。 题目描述: 反转一个单链表。...示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思路 这道题是非常经典的一道题了,没有很多的套路,主要方法有迭代法和递归法两种方法实现。...个人感觉做链表题目,最重要的还是自己多写,多练。 方法一:迭代法 迭代法就是相当于假设有两个链表,其中一个链表是空的,我们要做的工作就是把当前链表的元素不断移动到空链表上。...head.next.next = head; head.next = null; return node; } } 复杂度分析 时间复杂度: 空间复杂度: 总结 递归法的时间复杂度比迭代法的空间复杂度要高

    37110

    「算法与数据结构」JavaScript中的链表

    写在前面 此文会先探讨下什么是链表以及在 JavaScript 中的链表,接着我们会使用 JavaScript 这门语言动手实现下各类链表的设计,最后我们会抛出一些常规疑问,并从各个方面一一解答,总之...,必须要从起点(链表头部节点)开始迭代链表直到找到所需的元素,这点需要注意 JavaScript中的链表 上面我们简单介绍了常规链表的概念,但是在 JavaScript 这门语言中,我们怎么表示链表呢?...指针指向新添加的元素即可 新添加的元素 next 指针默认为 null,链表最后一个元素的 next 值也就为 null,另外,将节点挂到链表上之后,还需将链表的长度加 1,保证 length 属性等于链表长度...,这个比较简单,直接迭代即可,匹配到了返回对应索引,匹配不到返回 -1 // 获取链表中给定元素的索引 LinkedList.prototype.indexOf = function (val) {...这个方法在更新的时候是进行递归操作的,如果在更新的过程中有大量的节点需要更新,就会出现长时间占用 JS 主线程的情况,并且整个递归过程是无法被打断的,由于 JS 线程和 GUI 线程是互斥的(详看「硬核

    98710

    【算法】213-每周一练 之 数据结构与算法(LinkedList)

    所以,链表允许插入和删除表上任意位置上的节点,但是不允许随即存取。链表有很多种不同的类型:单向链表、双向链表及循环链表。...链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。 链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。...toString():由于列表项使用 Node 类,需要重写继承自 JavaScript 对象默认的 toString() 方法,让其只输出元素的值。...用链表的方式,输出一个反转后的单链表。...解题思路2.使用递归: 这里也可以使用递归,也可以参考反转链表的问题,终止条件是递归到链表为空,或者只剩下一个元素没得交换了,才终止。 ---- 解析: 题目出自:[Leetcode 24.

    69330

    Js算法与数据结构拾萃(3):链表

    Js算法与数据结构拾萃(3):链表 补白 准备阅读: 《javascript数据结构和算法》读书笔记:链表 这仍然是笔者一年前的笔记。...题解2:链表迭代 用链表的思路,很容易想到做迭代: var removeElements = function(head, val) { let current=head;...你可以迭代或递归地反转链表。你能否用两种方法解决这道题?...题解2:递归 递归的思路是甩锅,解决不了推给下一代(“搁置争议,交给下一代的智慧去解决”)。 每代的智慧是什么呢? •遇到尾部next为null,递归终止•遇到头部,让它的next为空。...我们仍然以龟兔赛跑为例子:假设兔子在环上追上乌龟的地点是first。那么,乌龟走的距离为F+a。

    68220
    领券