如何在不遍历链表的情况下找到单向链表的中间节点?
首先,这是否可能呢?
在一次遍历中,我使用传统方法使用两个指针,一个跳2个位置,另一个跳1个位置..是否有其他方法可以在一次遍历中找到中间节点呢?
如何在不遍历链表的情况下找到单向链表的中间节点?
首先,这是否可能呢?
在一次遍历中,我使用传统方法使用两个指针,一个跳2个位置,另一个跳1个位置..是否有其他方法可以在一次遍历中找到中间节点呢?
不,这是不可能的。节点的地址是任意的,因此没有办法在不遍历它们的情况下知道它们的地址。
public void findMiddleNode() {
Node n1 = headNode;
Node n2 = headNode;
while(n2.getNext() != null && n2.getNext().getNext()!= null) {
n1 = n1.getNext();
n2 = n2.getNext().getNext();
}
System.out.println("middle node is "+n1.getKey());
}
是的,如果您控制列表添加和删除的所有方面,则可以。
如果在添加或删除过程中保持对被视为中间节点的引用,则可以完成。必须处理几个情况。此外,还有一些场景需要考虑,例如,如果要考虑偶数个元素,那么中间节点将是什么?等等。
因此,您真正做的不是“查找”中间节点,而是跟踪它。
List list = new LinkedList();
for (int i = 0; i < 50; i++) {
list.add(String.valueOf(i));
}
int end = list.size() - 1;
int start = 0;
while (start > end) {
start++;
end--;
}
if(start == end) //The arrays length is an odd number and you found the middle
return start;
else //The arrays length is an even number and there really isn't a middle
//Do something else here because you have an even number
我在其他解决方案页面上看到了这段代码... 这不是另一种单向遍历列表的方法吗?
import java.util.LinkedList;
import java.util.List;
public class consoleApp
{
public static void main(String[] args)
{
List list = new LinkedList();
for (int i = 0; i < 50; i++)
{
list.add(String.valueOf(i));
}
int end = list.size();
int start = 0;
while (start< end)
{
start++;
end--;
}
if(start == end)
System.out.println(start);
}
}