[英]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.