如何在不遍历整个列表的情况下在链接列表中查找中间元素.?...并且最多只能使用2个指针......怎么办?....还没有给出列表的长度.
Jea*_*rin 27
除非你知道长度,否则我没有看到如何在不遍历整个列表的情况下完成它.
我猜测答案是希望一个指针一次遍历一个元素,而第二个指针一次移动2个元素.
这样,当第二个指针到达结尾时,第一个指针将位于中间.
asi*_*d88 12
以下代码将帮助您获得中间元素.你需要使用两个指针"快"和"慢".在每一步,快速指针将增加2,慢速将增加1.当列表结束时,慢速指针将位于中间.
让我们考虑一下Node这样的样子
class Node
{
int data;
Node next;
}
Run Code Online (Sandbox Code Playgroud)
LinkedList有一个getter方法来提供链表的头部
public Node getHead()
{
return this.head;
}
Run Code Online (Sandbox Code Playgroud)
下面的方法将获得列表的中间元素(不知道列表的大小)
public int getMiddleElement(LinkedList l)
{
return getMiddleElement(l.getHead());
}
private int getMiddleElement(Node n)
{
Node slow = n;
Node fast = n;
while(fast!=null && fast.next!=null)
{
fast = fast.next.next;
slow = slow.next;
}
return slow.data;
}
Run Code Online (Sandbox Code Playgroud)
示例:
如果列表为1-2-3-4-5,则中间元素为3
如果列表为1-2-3-4,则中间元素为3