如何遍历双向链表并为特定值创建新列表?
How to iterate through a double linked list and create a new list to a specific value?
如何遍历双链表并创建低于或等于或高于或等于特定值的新双链表?
例如:
["A", "B", "C"].below("B") = ["A", "B"]
我得到一个 ClassCastException,所以我不知道如何实现创建一个新列表并将这些节点添加到特定值。我已经实现了我自己的 compareto 方法,它工作正常。我的添加方法也可以正常工作。
main class:
.
.//some code
LinkedList<Item> itemList = new LinkedList<>();
itemList.add(....(..)));
.//some code
print(itemList.below(new Drink("Cola", 1.0, 1.0)));
.
.//some code
public class LinkedList <T extends Comparable<? super T>> implements List<T>
{
..
private Node <T> head;
private Node <T> last;
..//some code
public void add(T value)
{ ..}
public LinkedList <T> below (T value)
{
LinkedList <T> b = new LinkedList<>();
Node <T> curr = new Node<>(value);
Node <T> start = this.head;
while(start.next != null && curr.data.compareTo(start.next.data) <= 0 )
{
b.add((T) start); //ClassCastException
start = start.next;
}
return b;
}
private static class Node <T>
{
private T data;
private Node <T> next;
private Node <T> prev;
private static int counter = 0;
private final int ID;
private Node(T data)
{
this.data = data;
this.ID = counter;
counter++;
}
}
}
ClassCastException
是因为 start
被定义为 Node<T>
并且下面的代码将 Node<T>
对象转换为 T
对象,这是运行时错误。
b.add((T) start); //ClassCastException
您可能想打电话给:
b.add(start.data)
然而,data
被标记为private
。因此,要么将其标记为 public
,或者更好,在 Node
.
中添加访问器 getData()
方法
如何遍历双链表并创建低于或等于或高于或等于特定值的新双链表?
例如:
["A", "B", "C"].below("B") = ["A", "B"]
我得到一个 ClassCastException,所以我不知道如何实现创建一个新列表并将这些节点添加到特定值。我已经实现了我自己的 compareto 方法,它工作正常。我的添加方法也可以正常工作。
main class:
.
.//some code
LinkedList<Item> itemList = new LinkedList<>();
itemList.add(....(..)));
.//some code
print(itemList.below(new Drink("Cola", 1.0, 1.0)));
.
.//some code
public class LinkedList <T extends Comparable<? super T>> implements List<T>
{
..
private Node <T> head;
private Node <T> last;
..//some code
public void add(T value)
{ ..}
public LinkedList <T> below (T value)
{
LinkedList <T> b = new LinkedList<>();
Node <T> curr = new Node<>(value);
Node <T> start = this.head;
while(start.next != null && curr.data.compareTo(start.next.data) <= 0 )
{
b.add((T) start); //ClassCastException
start = start.next;
}
return b;
}
private static class Node <T>
{
private T data;
private Node <T> next;
private Node <T> prev;
private static int counter = 0;
private final int ID;
private Node(T data)
{
this.data = data;
this.ID = counter;
counter++;
}
}
}
ClassCastException
是因为 start
被定义为 Node<T>
并且下面的代码将 Node<T>
对象转换为 T
对象,这是运行时错误。
b.add((T) start); //ClassCastException
您可能想打电话给:
b.add(start.data)
然而,data
被标记为private
。因此,要么将其标记为 public
,或者更好,在 Node
.
getData()
方法