1 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
我添加了評論,以及一些修復:
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
}
}
使用文本圖形。假設(shè)新節(jié)點 N 將插入到 A 之后和 B 之前。初始狀態(tài),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
順序是:
N -> B new.nxt = cur
A <- N new.prv = cur.prv
A -> N new.prv.nxt = new
N <- B cur.prv = new
導致
A -> N -> B
A <- N <- B
添加回答
舉報