我是数据结构世界的新bie并且学习它,我有一个关于链表的查询,因为在其中一个访谈中被问到链接列表的上下文是如何从结束查找第3个元素在一次通过的链表中,我不知道这个请告知。
答案 0 :(得分:0)
if(node.next.next.next == null)
这有点脏,但基本上我只是检查该行下面的节点3节点是否为空。如果是的话,你从最后得到了第3个。当然,这不考虑大小小于3的列表。
答案 1 :(得分:0)
我假设你列表中的第一个节点叫做head。
所以设置指向head的指针,我们称之为当前
Node current = head;
然后制作另一个指向前方三个位置的指针
Node threeAhead = head.next.next.next;
然后编写一个循环,首先检查threeAhead.next是否为null,如果不是:
threeAhead = threeAhead.next;
curr = curr.next;
当threeAhead.next变为null时,您将从当前的三个位置开始。
答案 2 :(得分:0)
如果您在开始之前知道列表的长度,请使用JB Nizet的方法
node = first;
for (i = 0; i < length - N_FROM_END; i++) {
node = node.next;
}
result = node.value
如果你现在不长:
nodes = new Node[N_FROM_END];
node = first;
for (i = 0; node != null; i++) {
nodes[i % N_FROM_END] = node;
node = node.next;
}
result = nodes[i % N_FROM_END].value
或类似的东西。 (检查边界条件......并考虑列表长度小于N_FROM_END
。)
两个答案都满足“最多访问节点一次”约束。