为什么这个LinkedList排序算法有效?

时间:2016-07-10 01:27:15

标签: algorithm

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

    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); 

永远不要将元素添加到最后?它不会总是在之前和当前之间添加新节点吗?

1 个答案:

答案 0 :(得分:5)

previousNode,顾名思义,指向当前节点后面的节点。 到达结尾时(当您尝试插入的值大于任何当前元素时会发生这种情况)currentNode变为null,但previousNode指向最后一个节点。因此previousNode.setNextNode(newNode)工作正常。