你在一家音乐流媒体公司工作。
你的任务是为你的音乐播放器应用创建一个播放列表功能。
为音乐播放器应用写一个原型。
在原型中,每首歌就简单地用一个数字表示。 给定一个数字范围(也就是歌曲 ID),创建一个单向链表。
给定一个单向链表,你应该能够反转这个链表,从而按相反的顺序播放歌曲。
链表是计算机科学中的一种基础数据结构,常被用来实现其他数据结构。
最简单的链表是单向链表。 也就是说,每个元素(或称“节点”)都包含数据,以及指向链表中下一个节点的指针。
如果你想更深入地了解链表,可以看看这篇文章,它用直观的插图做了讲解。
定义一个linked-list-node元组。
定义一个linked-list元组,并提供一个M: linked-list length方法(来自sequences),这样测试就能直接在你的链表上调用length。
<linked-list> ( -- linked-list ):构造一个空链表。>linked-list ( seq -- linked-list ):按顺序把seq中的每个元素压入一个新链表。linked-list>array ( linked-list -- array ):返回各个值,链表顶部的值在最前面。list-push ( linked-list value -- linked-list ):把一个值压入顶部。list-pop ( linked-list -- linked-list value ):移除并返回顶部的值。list-peek ( linked-list -- value ):返回顶部的值,但不移除它。list-reverse ( linked-list -- linked-list ):返回一个元素顺序相反的链表。当链表为空时,从list-pop和list-peek中抛出list-empty错误类。