アルゴリズムに行き詰まった場合は、書き留めてください。
// First we have a pointer to a node containing element (elm)
// with possible a next element.
// Graphically drawn as:
// p -> [elm] -> ???
tmp = new Node();
// A new node is created. Variable tmp points to the new node which
// currently has no value.
// p -> [elm] -> ???
// tmp -> [?]
tmp.element = p.element;
// The new node now has the same element as the original.
// p -> [elm] -> ???
// tmp -> [elm]
tmp.next = p.next;
// The new node now has the same next node as the original.
// p -> [elm] -> ???
// tmp -> [elm] -> ???
p.element = y;
// The original node now contains the element y.
// p -> [y] -> ???
// tmp -> [elm] -> ???
p.next = tmp;
// The new node is now the next node from the following.
// p -> [y] -> [elm] -> ???
// tmp -> [elm] -> ???
あなたは必要な効果を持っていますが、それはより効率的であり、あなた自身を見つけることができると思います.
次のように書くとより明確になります。
tmp = new Node();
tmp.element = y;
tmp.next = p;
p = tmp;
もちろん、 p が可変でない場合は機能しません。ただし、p == NULL の場合、アルゴリズムは失敗します。
しかし、私が言いたかったのは、アルゴリズムに問題がある場合は、その効果を書き出すだけだということです. 特にツリーとリンクされたリストでは、すべてのポインターが正しい方向を指していることを確認する必要があります。そうしないと、大きな混乱が生じます。