【问题标题】:Adding into a sorted `linkedList`添加到排序的`linkedList`
【发布时间】:2015-10-11 04:24:19
【问题描述】:

伙计们,我的方法需要将一个新元素添加到已经排序的列表中,即在适当的位置。关键是该方法检查最低行索引,然后比较它的列。例如,

    board.set(2,2, 11);
    board.set(-1,0,22);
    board.set(-1,2,33);
    board.set(1,0,44);
    board.set(3,0,55);
    board.set(3,1,66);
    board.set(3,3,77);
    board.set(3,2,88);
    board.set(-1,1,99);

结果应该是:

[(-1,0,22), (-1,1,99), (-1,2,33), (1,0,44),  (2,2,11), (3,0,55), (3,1,66), (3,2,88), (3,3,77)]

但是我的程序会打印这个:

[(-1,0,22), (-1,1,99), (3,2,88), (3,3,77), (3,1,66), (3,0,55), (1,0,44), (-1,2,33), (2,2,11)]

即它不会将物体放在正确的位置。

我有一个LinkedList<RowColElem<T>>rowColSeq,可以在其中添加对象并将其放置在“随时随地”的适当位置。我的代码缺少什么?

注意我不允许使用比较器,可比较的接口!

LinkedList<RowColElem<T>> rowColSeq; // Is not empty, already contains objects!
 private void sortedRowColSeq(int row, int col, T x){
      RowColElem<T> object = new RowColElem<T>(row, col, x);
      ListIterator<RowColElem<T>> iter = rowColSeq.listIterator();
      RowColElem<T> inListObject;
      boolean added = false;
      while(iter.hasNext()){
          inListObject = iter.next();
          if(object.getRow() < inListObject.getRow()){
              iter.previous();
              iter.add(object);
              undoStack.push(object);
              added = true;
              break;
          }
          else if(object.getRow() == inListObject.getRow()){
              if(object.getCol() < inListObject.getCol()){
                  iter.previous();
                  iter.add(object);
                  undoStack.push(object);
                  added = true;

              }
          }

          else{
              iter.add(object);
              undoStack.push(object);
              added = true;
              break;
            }
          }
     }

【问题讨论】:

    标签: java linked-list iterator


    【解决方案1】:

    如果新元素大于一些元素,则不能添加。您必须在较大的一个之前或末尾输入。

     boolean added = false;
     while(iter.hasNext()){
          inListObject = iter.next();
          if(object.getRow() < inListObject.getRow() ||
             object.getRow() == inListObject.getRow()) &&
             object.getCol() < inListObject.getCol() ){
              if( iter.hasPrevious() ){
                  iter.previous();
                  iter.add(object);
              } else {
                  rowColSeq.addFirst( object );
              }
              undoStack.push(object);
              added = true;
              break;
          }
     }
    
     if( ! added ){
          rowColSeq.addLast(object);
          undoStack.push(object);
          added = true;
     }
    

    使用 iter.previous() 的方法在某些情况下注定会失败,所以我添加了一个测试和替代代码。

    【讨论】:

    • @KemalP。如果评论不正确,您可以删除评论 - 现在似乎可以使用?
    • 是的!谢谢@laune...(评论被删除)
    • 顺便说一句,@laune,要添加对象,以便可以先在 cols 和 n 行中检查它,因此可以将它输入到先用 cols 排序的列表中,我是否只需要切换if - 语句中的 col 行?
    • 当然:你需要先检查更重要的标准,只有当这是“平局”时,你才会检查下一个。
    • 您也可以看看这里吗? @laune 我有一个更大的问题:对角添加对象。 stackoverflow.com/questions/33062219/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2018-01-25
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多