擅长:python、mysql、java
<p>在没有看到你的代码的情况下,我想我能给出的基本提示是,如果你在基于链表的操作中,这将涉及到大量的迭代。使用<code>aa.cons(item)</code>这样的东西效率低下,而且基于迭代,因为与基于数组的列表不同,您不能跳转到特定索引处的项。在</p>
<p>对于下面的示例,我将假设您的<code>LinkedList</code>类有一个名为<code>first</code>的变量,它指向列表中的第一个项,每个{<cd4>}都有一个名为<code>next</code>的变量,该变量指向列表中的下一项,以及一个名为<code>data</code>的变量,该变量保存该节点上的数据。在</p>
<p>对于<code>aa.first()</code>,这应该很容易,因为已经有一个变量<code>head</code>指向第一个项。把那个还给我。在</p>
<p>对于其他方法,您需要迭代。这是一个示例,说明如何循环并打印出列表。在</p>
<pre><code>current = list.first
while current is not None:
print current.data
current = current.next
</code></pre>
<p>对于<code>aa.rest()</code>,您必须跳过第一项,然后遍历列表的其余部分。要在列表中迈出一步,您实际上需要跟踪当前位置并进行迭代。为了返回list[1:],我想最简单的事情就是创建一个新的list,然后迭代,将从1到末尾的所有项都添加进来。在</p>
<p><code>aa.rest()</code>实际上只是<code>aa.cons(item)</code>的一个特例。迭代列表,直到当前指针到达<code>item</code>,然后创建一个新列表,其中包含此后的所有内容。在</p>
<p>您不必创建新的列表来从<code>rest()</code>和<code>cons(...)</code>返回,这取决于您希望如何实现它。我留下插页给你考虑。在</p>
<p>对于一个只有一个指向<code>head</code>的指针的<code>LinkedList</code>,除了添加到列表的前面或访问第一个项之外,其他任何内容都将近似于O(N)。在</p>
<p>我希望这能有所帮助!在</p>