java - 如何在一次迭代中到达单向链表的中间?

标签 java data-structures

最近有人问我一个问题,在单向链表中我们如何在一次迭代中到达链表的中间。

A --> B --> C --> D (even nodes)

为此它应该返回指向 B 的地址

A --> B --> C (odd nodes)

为此它也应该返回指向 B 的地址

有一种解决方案是采用两个指针,一个移动一次,另一个移动两次,但它在这里似乎不起作用

LinkedList p1,p2;

while(p2.next != null)
{
    p1 = p1.next;
    p2 = p2.next.next;

}

System.out.print("middle of the node" + p1.data); //This does not give accurate result in odd and even

如果有人以前这样做过,请帮忙。

最佳答案

基本算法是

0取两个指针

1 使两者都指向第一个节点

2 首先增加两个节点,如果成功则首先遍历第二个节点到前面的一个节点

3 当第二个到达终点时,第一个到达中间。

更新:

它肯定会在奇数情况下工作,对于即使是您需要检查一个条件,如果允许第一个点移动下一个但不是下一个next 那么两个指针都将在中间,你需要决定将哪个指针作为中间

alt text

关于java - 如何在一次迭代中到达单向链表的中间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4509215/

相关文章:

java - 如何清除JTextPane中的所有样式?

java - 为什么 from index 是 inclusive 而 end index 是 exclusive?

java - 支持快速第k大元素查找的队列数据结构

python - 深层嵌套字典/ map 情况所需的替代数据结构

使用 Java ASM 的 java.lang.VerifyError 错误

java - JasperReports 作为通用文档生成工具

java 输出十六进制(ByteArrayOutputStream)

c++ - 结构中的默认成员值或默认构造函数参数?

c# - AutoResetEvent 和多个 Set

mysql - 管理数据库记录的流行趋势