我一直在研究一种算法,将元素添加到链表,并在添加元素时对其进行排序。我的代码有效,我知道为什么在大多数情况下,但我很惊讶地看到这段代码适用于在列表末尾添加元素。代码如下:
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);
从不将元素添加到末尾?它不会总是在以前和当前之间添加新节点吗?
previousNode,顾名思义,指向当前节点后面的节点。当你到达末尾时,(当你尝试插入的值大于任何当前元素时,就会发生这种情况)currentNode 变为 null,但 previousNode 指向最后一个节点。因此,previousNode.setNextNode(newNode)工作正常。