リンクリストを逆にすることに関して質問がありますが、私は自分の実装でこれを理解しようとします。C++リンクリストの逆転 - ポインタが進まない
私のコードは意味があり、うまくいくはずですが、デバッガを実行するとループは無限に実行されます。具体的には、head
とnext
はリンクされたリストの第1ノードと第2ノードの間を交互に保持します。 getLink()
メソッドは、ノードのポインタ(リスト内の次のノードを指している)を返します。 whileループの下のコメントに基づいた入力は役に立ちます。
void revNodes(IntNodePtr& head)
{
IntNodePtr prev = NULL;
IntNodePtr next = NULL;
next = head;
while (next != NULL)
{
prev = head;
// this should advance the pointer head to the next node in the list because next is the same as head initially
head = next->getLink();
// advance the pointer next to node after it
next = next->getLink();
// set the pointer in the node that head is pointing to to prev (head before head was advanced)
head->setLink(prev);
}
}
これはかなり意味があります。私の最初の戦略は、ヘッドが前のノードを指していたノードの中のポインタをポイントして同時に「次へ」を進めることができるように、「次の」という形で「ヘッド」の「コピー」を作成することでした。しかし、私と頭が同じノードを指していたことに気づきませんでした! –