2012-04-25 14 views
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.

後に、それは本当に違いを生むんされて置きますか?結局のところ、あなたは古いリストを反復しているので、理由を理解できませんでした。なぜ完了しなければならないのですかすぐに* temp宣言の後に?

+1

あなたの質問は何か分かりません。コードの順序を変更すると、その動作が変わると言っていますか?すべてのリンクリストの操作上の問題を合理化する方法は、紙の上に箱と矢の束を描くことです。 –

答えて

2

Node *temp = oldList; 

を行った後、両方のポインタが同じ場所を指します。

temp->next = newList; 

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

+0

すばらしい説明をいただきありがとうございます! – Ali

関連する問題