2

この質問はおそらく最も一般的な質問の 1 つであり、解決策を探しているときに多くの質問を見つけましたが、以下のコードが私に最も適していました。

実際に行うことは、別のリストを作成し、古いリストを反復処理して、常に新しいリストの先頭に要素を追加することです。

Node *reverseList(Node *oldList)
{
    Node* newList=NULL;

    while(oldList!=NULL)
    {
        Node *temp=oldList;
        oldList=oldList->next;

        temp->next=newList;
        newList=temp;  
    }
    return newList;
}

ただし、このコードを見ずにこのアイデアを再実装することにしたとき、の場所を変更し、のoldList=oldList->next;後に置きました。newList=temp.

私の質問は、それは本当に違いを生むのでしょうか? 結局のところ、oldList を反復処理しているため、理由を理解できませんでした。*temp宣言の直後に実行する必要があるのはなぜですか?

4

1 に答える 1

2

やった後

Node *temp = oldList;

両方のポインタが同じ場所を指しています。以来

temp->next = newList;

oldListの次のポインタを上書きします(この段階ではtempと同じものを指しているため)。最初に次のポインタからoldListを更新する必要があります。

于 2012-04-25T12:58:16.013 に答える