我一直在研究将元素添加到链表中的算法,并在添加元素时对其进行排序。我的代码工作,我知道为什么在大多数情况下,但我很惊讶看到这些代码用于在列表的末尾添加元素。这是代码:
public void add(int value)
{
Node currentNode;
Node previousNode;
Node newNode;
if(firstNode == null)
{
firstNode = new Node(value,firstNode);
}
else
{
currentNode = firstNode;
previousNode = null;
while(currentNode != null && value > currentNode.getValue())
{
previousNode = currentNode;
currentNode = currentNode.getNextNode();
}
if(previousNode == null)
{
firstNode = new Node(value, firstNode);
}
else
{
newNode = new Node(value,currentNode);
previousNode.setNextNode(newNode);
}
}
}
所以我知道这可以用于添加到开头或中间,但是它如何添加到结尾?我的意思是,如果while循环遍历到列表的末尾,那么currentNode是最后一个节点,前一个节点是之前的节点,所以不会:
newNode = new Node(value,currentNode);
previousNode.setNextNode(newNode);
永远不要将元素添加到最后?它不会总是在之前和当前之间添加新节点吗?
答案 0 :(得分:5)
previousNode,顾名思义,指向当前节点后面的节点。 到达结尾时(当您尝试插入的值大于任何当前元素时会发生这种情况)currentNode变为null,但previousNode指向最后一个节点。因此previousNode.setNextNode(newNode)工作正常。