链接列表的元素

时间:2014-10-16 23:47:58

标签: java linked-list

有人可以在Java中解释如何在单次传递中找到链表的中间元素?

我用谷歌搜索过,但似乎无法找到关于如何编码的简单解释。

3 个答案:

答案 0 :(得分:2)

LinkedList<String> list = new LinkedList<>();
list.add("foo");
list.add("bar");
list.add("baz");
String middle = list.get(list.size()/2);
System.out.println(middle); // bar

分配middle的来电将在get来电期间通过列表的一半。

正如评论中指出的那样,中间是LinkedList上操作最差的地方。请考虑使用其他变体,例如ArrayList

答案 1 :(得分:0)

我认为这是一个技巧问题,你可以在可能的面试问题清单上看到。

一个解决方案是有两个指针逐步完成列表,一个采取两步,一步采取一步。

当一次指向两个步骤的指针到达列表的末尾时,只执行一步的指针将在中途。

我怀疑这种做法确实很有用..

祝你好运!

答案 2 :(得分:-2)

由于它是一个LinkedList,因此在第一次(也是唯一一次)传递之前,你无法找到它的大小。要找到中间元素,你需要知道两件事;什么索引位于中间,该索引处元素的值是多少。查找中间索引很简单 - 只需在列表中进行一次传递,然后计算出有多少节点。在执行此操作时,您需要在单独的数据结构(可能是ArrayList)中跟踪每个元素,因为您只允许一次通过LinkedList。完成后,计数器的一半找到中间索引,并返回该索引处的ArrayList元素。

伪代码如下所示:

int count
ArrayList elements

for each node in LinkedList:
  count++
  elements.append(node)

middleIndex = count/2
middleElement = elements.getIndex(middleIndex)

return middleElement

当然,您需要处理没有单个中间元素的情况。