簡體   English   中英

如何遍歷雙向鏈接列表並創建一個新列表到特定值?

[英]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()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM