我正在处理链表代码,并想访问head.next.next.data。有没有一种方法可以将.next.next.data存储到变量x中,以便可以进行调用head.x并检索结果(只要列表中已填充数据)?我要实施
public class CustomSOL<E> implements SOL<E>
{
private static class customNode<E>
{
private customNode<E> next;
private E data;
public customNode(E dataItem)
{
this.data = dataItem;
this.next = null;
}
private customNode(E dataItem, customNode<E> nodeRef)
{
this.data = dataItem;
this.next = nodeRef;
}
}
private customNode<E> head;
private int size;
public CustomSOL()
{
head = null;
size = 0;
}
public void solLookup(int amount)
{
String s = "next";
StringBuilder sb = new StringBuilder(14);
for(int i = 0; i < amount; i++)
sb.append(".").append(s);
System.out.println(head.s.data);
}
}
如果有的话,主要是这样
CustomSOL<String> list = new CustomSOL<String>();
list.solAdd("Apple");
list.solAdd("Orange");
list.solAdd("Banana");
list.solAdd("Strawberry");
list.solAdd("Papaya");
然后我调用list.solLookup(3):
String s = "next.next.next";
System.out.println(head.s.data);
我想看到草莓,但显然不会,因为s是字符串。但是有没有办法像javascript和PHP具有变量函数一样,用变量s替换所有这些后续调用?我使用字符串是因为可以在solLookup中使用amount参数来创建适当的下一个调用符号。谢谢!
答案 0 :(得分:1)
head.next.next.data
(大概是对某些数据的引用)。 Java编译器将该短语转换为可执行代码以获取所需的数据。
".next.next.data"
只是程序中的Unicode字符序列,无论是字面呈现还是在运行时构建。 (在简单的编程中)不可能将其转换为对某些数据的运行时引用,而这些数据恰好与字符串中的字符相似。这样做对于Java编译器来说是一项工作,并且编译器已经在程序运行之前完成了工作。
有一些先进的技术(“反射”),但我不建议您以我认为是您的专业水平来推荐它们。
要获得第k级对象,只需简单地遍历列表“ k”次:
public Node get(int k) {
Node n = head;
while (k > 0) {
n = n.next; // or n.next() if need be
k--;
}
return n;
}
这比用'k'出现的'next'字符串构建起来简单。
答案 1 :(得分:0)
假设这样实现链表:
class List<T> {
static class Head<T> {
public T value;
public Head<T> next;
public Head(T value) {
this.value = value;
}
}
public Head<T> head;
}
您可以像这样使用它:
List<String> list = new List<>();
list.head = new List.Head<>("a");
list.head.next = new List.Head<>("b");
System.out.println(list.head.next.value);
有很多方法可以改善这一点,但您会明白。