为什么这个链接列表排序算法有效



我一直在研究一种算法,将元素添加到链表,并在添加元素时对其进行排序。我的代码有效,我知道为什么在大多数情况下,但我很惊讶地看到这段代码适用于在列表末尾添加元素。代码如下:

    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)工作正常。

最新更新