我有一个包含链接的数组。每个链接都有一个名为next的公共字段,它可以容纳另一个链接,该链接可以容纳更多链接等。当我想删除我能做的事情时
array[x].next = array[x].next.next;
将删除第二项。但是我希望能够删除任何项目,那么如何将其变为带变量的表单?方程式将是这样的:如果我想删除项目n我会做
array[x](.next*(n-1)) = array[x](.next*n);
如果n = 4,我想exand到
array[x].next.next.next = array[x].next.next.next.next;
希望我的问题很明确。我需要知道如何这样做,因为我不能将getter或任何其他代码设置到我的链接类中,并且因为我是我的代码的唯一所有者,所以我不会不情愿地设置我的字段。 Java的。
答案 0 :(得分:1)
正如其他答案中所提到的,您正在实现的是一个链表,您可能最适合利用Java的库。
为了解决你提出的问题,你可能会要求提供第n跳参考的功能
Link getLink(Link link, int hops){
Link retVal = link;
for (int i = 0; i < hops; i++){
if (link == null){
//hops is too large. Do something to indicate error
}
else{
retVal = retVal.next;
}
}
return retVal;
}
然后你可以执行
getLink(array[x],2).next = getLink(array[x],4);
或者如果你想使用反射(不推荐,因为反射相对昂贵),那么你可以做类似的事情
Link myLink = array[x];
Field next = Link.class.getField("next");
//assume proper error handling
for (int i = 0; i < hops; i++){
myLink = (Link) next.getObject(myLink);
//assume proper error handling
}
答案 1 :(得分:0)
似乎你所拥有的是一系列链接列表。我不知道你为什么担心这种花哨的语法扩展的东西,当什么工作得很好是一种删除第n个节点的方法,并且有吨的实现在互联网上浮动。< / p>
事实上,您可以查看java.util.LinkedList
的来源并自行复制该实现,如果您有单链表,可以进行简单修改。基本公式是:
答案 2 :(得分:0)
使用简单的循环步进n次。这是删除第n个的一些代码:
Link link = array[x], prev = link;
int n = ?;
for (int i = 0; i < n; i++) {
prev = link;
link = link.next;
}
prev.link = link.next;