如何修改字段字段的公共字段…如链接.next.next.next(.next * n)n次

我有一个包含链接的数组。 每个链接都有一个名为next的公共字段,它可以容纳另一个链接,该链接可以容纳更多链接等。 当我想删除我能做的事情时

array[x].next = array[x].next.next; 

这将删除第二项。 但是我希望能够删除任何项目,那么如何将其变为带变量的表单? 这个等式将是这样的:如果我想删除项目,我会这样做

 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的。

正如其他答案中所提到的,您正在实现的是一个链表,您可能最适合利用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); 

或者如果你想使用reflection(不推荐,因为reflection相对昂贵),那么你可以做类似的事情

 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 } 

看起来你有什么链接列表。 我不知道为什么你担心这种花哨的语法扩展的东西,什么工作得很好是一种删除第n个节点的方法,并且有大量的实现浮动在互联网上。

实际上,您可以查看java.util.LinkedList的源代码并java.util.LinkedList复制该实现,如果您有单链接列表,可以进行简单的修改。 基本公式是:

  1. 从第一个节点迭代,重复查找下一个节点,直到到达第n个节点
  2. 取消链接该节点的链接

使用一个简单的循环来进行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;