简体   繁体   English

我需要一些有关排序节点的解释

[英]I need some explanation about sorting nodes

I am confused how this comparing works, for example the second if statement, if comparison > 0 it should be before currentItem, but the lines inside the if statement have confused me too much, can you explain it to me how they work? 我对这种比较的工作方式感到困惑,例如第二条if语句,如果compare> 0,它应该在currentItem之前,但是if语句中的行让我很困惑,您能向我解释它们的工作原理吗?

By the way 顺便说说

this.root

is an instance of ListItem and the code doesn't use LinkedList or ArrayList class, the code below trying to emulate something in LinkedList i think, If my questions need more explanation, tell me please. 是ListItem的实例,代码不使用LinkedList或ArrayList类,下面的代码试图在LinkedList中模拟某些东西,我想,如果我的问题需要更多说明,请告诉我。 Best regards 最好的祝福

@Override
    public boolean addItem(ListItem newItem) {
        if(this.root == null){
            this.root = newItem;
            return true;
        }
        ListItem currentItem = this.root;
        while (currentItem != null){
            int comparison = currentItem.compareTo(newItem);
            if (comparison < 0){
                if (currentItem.next()!=null){
                    currentItem = currentItem.next();
                }
                else{
                    currentItem.setNext(newItem);
                    newItem.setPrevious(currentItem);
                    return true;
                }
            }
            else if (comparison > 0){
                // new Item is less, insert before
                if (currentItem.previous()!= null){
                    currentItem.previous().setNext(newItem);
                    newItem.setPrevious(currentItem.previous());
                    newItem.setNext(currentItem);
                    currentItem.setPrevious(newItem);
                }else{
                    newItem.setNext(this.root);
                    this.root.setPrevious(newItem);
                    this.root = newItem;
                }

            }
        }
            return false;
    }

I added comments, plus some fixes: 我添加了评论以及一些修复程序:

public boolean addItem(ListItem newItem) {
    if(this.root == null){
        this.root = newItem;
        return true;
    }
    ListItem currentItem = this.root;
    while (currentItem != null){
        int comparison = currentItem.compareTo(newItem);
        if (comparison < 0){                               // if cur < new
            newItem.setPrevious(currentItem.previous());   //   advance cur
            if (currentItem.next()!=null){
                currentItem = currentItem.next();
            } else {                                       //   if end list
                currentItem.setNext(newItem);              //     append new
                newItem.setPrevious(currentItem);
                return true;
            }
        } else if (comparison > 0){
            // new < cur, insert before, fixes made to this part
            newItem.setNext(currentItem);                  // set   new.nxt
            newItem.setPrevious(currentItem.previous());   // set   new.prv
            if (newItem.previous()!= null){                // if    new.prv != 0
                newItem.previous().setNext(newItem);       //   set new.prv.nxt
            else                                           // else
                this.root = newItem;                       //   set root
            currentItem.setPrevious(newItem);              // set   cur.prv
            return true;
        }
        return false;     // return false if duplicate
    }
}

Using text graphics. 使用文字图形。 Say the new node N is to be inserted after A and before B. Initial state, cur (currentItem) = B: 假设要在A之后和B之前插入新节点N。初始状态,cur(currentItem)= B:

                                  cur         == B
    A <------ B    0 <- N         cur.prv     == A  new.prv = 0
    A ------> B         N -> 0    cur.prv.nxt == B  new.nxt = 0

The sequence is: 顺序为:

         N -> B                   new.nxt      = cur
    A <- N                        new.prv      = cur.prv
    A -> N                        new.prv.nxt  = new
         N <- B                   cur.prv      = new

resulting in 导致

    A -> N -> B
    A <- N <- B

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM