這可能是更簡單的方法來建立你的鏈接列表中的一個:
String map = "ABBACBCCA";
ListNode<Character> head = null;
ListNode<Character> tail = null;
for (char c:map.toCharArray()) {
final ListNode<Character> node = new ListNode<>(c);
if (head == null) {
head = node;
} else {
tail.next = node;
}
tail = node;
}
雖然把你的類型參數的關懷無處不在
class ListNode<T> {
public T data = null;
ListNode<T> next = null;
public ListNode(T data) {
this.data = data;
}
}
更何況,你可以充分槓桿Java api's以及:
LinkedList<Character> ll =
"ABBACBCCA".chars()
.mapToObj(i->(char)i) // takes care of boxing char
.collect(Collectors.toCollection(LinkedList<Character>::new));
而且循環通過你ListNode
的,你可以考慮增加:
class ListNodeIterator<T> implements Iterator<T> {
private ListNode<T> current;
public ListNodeIterator<T> ListNodeIterator(ListNode<T> node) {
current = node;
}
public boolean hasNext() {
return current.next != null;
}
public T next() {
current = current.next;
return current.data;
}
}
有了改變如下:
class ListNode<T> implements Iterable<T> {
public T data = null;
public ListNode<T> next = null;
public ListNode(T data) {
this.data = data;
}
public Iterator<T> iterator() {
return new ListNodeIterator<>(this);
}
}
所以你可以按如下方式使用它:
for (char c:head) {
System.out.println("Character: "+c);
}
或甚至
head.forEach(c->{System.out.println("Character: "+c);});
呃......那是不是通過Javaland的愉快之旅?
使用調試器。 –
沒有「無限循環」的證明。唯一提供的循環(for'charArray'上的循環似乎結束了,除此之外的代碼顯然是錯誤的 – YoYo