【发布时间】:2014-01-11 19:29:33
【问题描述】:
我无法在 java 中找出通用单链表的大小。这是我的代码(下面我将解释我是如何找到它的以及遇到了什么困难):
class List<T> {
/**
* An immutable singly-linked list.
* @param <T> the type of the list elements
*/
T head;
List<T> tail;
List(T head, List<T> tail) {
this.head = head;
this.tail = tail;
}
/** Generic helper function for list creation. You DO NOT NEED to call this function. */
static <U> List<U> node(U head, List<U> tail) {
return new List<U>(head, tail);
}
/* Getters and Setters for the head and the tail; */
public List<T> getTail() {
return tail;
}
public void setTail(List<T> tail) {
this.tail = tail;
}
public T getHead() {
return head;
}
public void setHead(T head) {
this.head = head;
}
我试图找出这样的大小:
循环遍历链表的元素,从第一个元素开始,直到“next”指针显示null。增加辅助变量size。
代码:
public int size(){
int size = 0;
T temp = head;
while (temp.getTail() != null) {
temp = temp.getTail();
size++;
}
return size;
}
问题是temp.getTail()。在这种特定情况下,Eclipse 要求将变量temp 转换为List<T>。但这对我来说毫无意义,因此List<T> 应该就像指向列表下一个元素的“下一个”指针。
请有人这么好心并解释我做错了什么以及如何解决这个问题。我真的很想了解泛型(我也阅读了很多关于泛型的文章,但似乎仍然无法弄清楚如何处理这种情况)。
我将在我的测试类中使用这个列表:
List<Integer> coins = List.node(1, List.node(2, List.node(5, List.node(10,
List.node(20, List.node(50, List.node(100, List.node(200, null))))))));
在给定欧元金额的情况下,我将递归计算可能的硬币组合的数量(值 1、2、5、10、20、50、100 和 200)。
【问题讨论】:
-
为什么
tail的类型是List<T>?此外,getTemp()方法在List<T>中定义,并且您正试图从T类型变量中调用它。那是行不通的。 -
@RohitJain 这是一个课堂作业。类
List<T>的属性给了我们。我也想弄清楚为什么tail的类型是List<T>而不仅仅是T。我的猜测是,tail是某种“下一个”指针,它显示到列表的下一个元素。在这种情况下,如何遍历列表的元素以找出大小?这是我的问题...
标签: java generics linked-list