title: What is Node *& aNode?
body: <p>In the following code:</p>
  
  <pre><code>void insert(Node *&amp; aNode, int x) {
    if (!aNode) {
      aNode = new Node(x);
      aNode-&gt;next = aNode;
      return;
    }
  
    Node *p = aNode;
    Node *prev = NULL;
    do {
      prev = p;
      p = p-&gt;next;
      if (x &lt;= p-&gt;data &amp;&amp; x &gt;= prev-&gt;data) break;   // For case 1)
      if ((prev-&gt;data &gt; p-&gt;data) &amp;&amp; (x &lt; p-&gt;data || x &gt; prev-&gt;data)) break; // For case 2)
    } while (p != aNode);   // when back to starting point, then stop. For case 3)
  
    Node *newNode = new Node(x);
    newNode-&gt;next = p;
    prev-&gt;next = newNode;
  }
  </code></pre>
  
  <p>What is  Node *&amp; aNode?</p>
  
  <p>How should I use this function, I mean, which type of parameter should I pass?</p>