从头部移除:
因为您知道您的列表应该始终排序,如果您删除(当前)头值,那么下一个头应该是行中的“下一个”。您最初只能访问“head”节点,并且必须一个一个地向下移动列表。
在这种情况下,假设有一群人按名字顺序排队。如果他们都手牵着手,形成一条链子,按顺序排到下一个人,你就把第一个人排在后面。从逻辑上讲,你可以假设握着他们手的人是新的头。
Node<E> temp = new Node<E>(data);
if(check to see if you want to remove head){
temp.next = head.next; //current head points to next in line so so shall new head(temp);
head = temp; //head ref variable points to only new head and old one is inaccessible and will be cleared out during garbage collection.
}
中间插入和移除:
使用前面的牵手的相同类比。如果我需要在两个人中间“插入”一个人,我首先要找到他们属于哪里,然后让他们与“当前”和“下一个”之前和之后的人牵手。
对于插入代码,您必须搜索直到找到正确的插入位置,该位置可以位于两个节点之间,而不是假设如果下一个值为空,则只插入。
private void insert(Node<E> curr, E data){
if (curr.next == null) {
curr.next.data = data; //only inserts if next value is null
} else { // what about inserting 3, into a list of {1,5}.
curr.next.insert(curr, data);
}
}
您需要检查当前值和下一个值在排序顺序中是否正确。
else if(curr.data <= data && curr.next.data > data){
// you've found the nodes you want to insert in between
}else{
... keep searching until you hit a null
}