簡體   English   中英

LinkedList存儲節點的LinkedList

[英]LinkedList to store LinkedList of Nodes

我編寫了一個LinkedList類,該類接受存儲Integers Nodes

我已經然后,創建一個LinkedList stack = new LinkedList()並增加了Node s到它,如果數據Node s為小於所述的數據Node s表示已經在此存在stack

如果沒有,我想把這個老stack到一個新LinkedList稱為LinkedList pilesOfStacks ,並創建一個newStack稱為LinkedList newStack = new LinkedList()並添加較大的Node進入這個newStack這也將進入LinkedList pilesOfStacks

我的問題是; 因為我已經創造了我LinkedList類接受Node S,我怎么做一個新LinkedList接受LinkedList這幫的Nodes ,基本上是建立不同樁LinkedList在A S LinkedList

這是我到目前為止的內容:

public void sort(LinkedList listOfInts)
{

  LinkedList<LinkedList> piles = new LinkedList<LinkedList>();

  LinkedList stack = new LinkedList();

  for(int i = 0; i < listOfInts.getSize(); i++)
  {
    Node x = listOfInts.pop();
    for(int j = 0; j < piles.getSize(); j++)
    {
      Node y = piles.peek(); //check first element of each pile

      if( ( ((Comparable)y.getData()).compareTo(x.getData()) ) <= 0)
      {
        stack.push(x);
        break;
      }
    }
    stack.push(x); //put value in stack
    piles.add(stack);
  }
}

編輯:如果我可以使用數組,我會創建一個雙精度數組來影響Node[][] array = new Node[20][20]; 然后使用Node[i][0]搜索它,但是由於我只能使用LinkedList ,所以我想知道如何執行此操作?

好的,我只是試一試-使用KamiRoman C提到的Java Collection Framework。 為避免混淆,我始終使用所涉及的接口/類的全限定名- 即使這會使代碼看起來笨拙

我用的是java.util.LinkedList它實現了java.util.List還有java.util.Deque接口。 后者為您提供了將其視為堆棧的方法。

我從方法名稱假設,您實際上要對堆棧中的節點進行排序。 為此,我不得不更改您原始示例的某些部分,因為它似乎不像您描述的那樣運行。

我得到了您的示例的以下變體:

public void sort(java.util.Deque<Node> stackOfIntNodes) {
    java.util.List<java.util.Deque<Node>> piles =
            new java.util.LinkedList<java.util.Deque<Node>>();
    java.util.Deque<Node> currentStack = new java.util.LinkedList<Node>();
    inputLoop : while (!stackOfIntNodes.isEmpty()) {
        Node currentNode = stackOfIntNodes.pop();
        for (java.util.Deque<Node> singlePile : piles) {
            // check first element of each pile
            Node smallestNodeInSinglePile = singlePile.peek();
            Object valueOfSmallestNodeInSinglePile =
                    smallestNodeInSinglePile.getData();
            if ((((java.lang.Comparable) valueOfSmallestNodeInSinglePile)
                    .compareTo(currentNode.getData())) <= 0) {
                singlePile.push(currentNode);
                continue inputLoop;
            }
        }
        piles.add(currentStack);
        currentStack = new java.util.LinkedList<Node>();
        currentStack.push(currentNode); // put value in stack
    }
    piles.add(currentStack);
    java.util.Deque<Node> sortedStackOfIntNodes = new java.util.LinkedList<Node>();
    for (java.util.Deque<Node> singlePile : piles) {
        while (!singlePile.isEmpty()) {
            sortedStackOfIntNodes.push(singlePile.pop());
        }
    }
    // RESULT: you got all your Node elements in sorted order
}

但是,如果您確實使用java.util.LinkedList而不是自己的實現,則可以輕松使用此等效方法:

public void sort(java.util.Deque<Node> stackOfIntNodes) {
    java.util.LinkedList<Node> sortedListOfIntNodes =
            new java.util.LinkedList<Node>(stackOfIntNodes);
    java.util.Collections.sort(sortedListOfIntNodes,
            new Comparator<Node>() {
                @Override
                public int compare(Node nodeOne, Node nodeTwo) {
                    return ((java.lang.Comparable) nodeOne.getData())
                            .compareTo(nodeTwo.getData());
        }
    });
    // RESULT: you got all your Node elements in sorted order
}

根據您實際的Node類和/或自己的LinkedList,您可能必須在此處應用進一步的更改。

暫無
暫無

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

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