java - 如何遍历一个双链表并创建一个新列表到一个特定的值?
问题描述
如何遍历一个双链表并创建一个低于或等于或高于或等于特定值的新双链表?
例如:
["A", "B", "C"].below("B") = ["A", "B"]
我有一个 ClassCastException,所以我不知道如何实现创建一个新列表并将这些节点添加到特定值。我已经实现了自己的 compareto 方法,该方法可以正常工作。我的 add 方法也可以正常工作。
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
被定义为 aNode<T>
并且以下代码将对象强制转换为Node<T>
对象T
,这是运行时错误。
b.add((T) start); //ClassCastException
你可能的意思是打电话:
b.add(start.data)
但是,data
标记为private
。所以要么标记它public
,或者更好的是,getData()
在Node
.
推荐阅读
- nginx - 访问 CKAN 扩展目录时出现 404 错误
- flask - 如何在应用工厂模式中管理额外的模块?
- arrays - Delphi 程序数组参数混淆
- php - SimpleXML 根节点前缀 php
- javascript - 十月CMS:slugs和id有什么区别
- javascript - 垂直滚动条适用于 chrome 但不显示
- javascript - 如果我可以通过 this 调用父方法,那么为什么要在 ES6 中使用 super 呢?
- go - go中的非阻塞通道
- php - 自动计算总金额和滞纳金金额
- android - 如何检索在 RecyclerViewAdapter 中单击的最后一个位置的视图?