Reverse LinkList
1492 ワード
に質問
反転単一チェーンテーブル例:元のチェーンテーブル:1->2->3->4現地で反転、反転後:4->3->2->1
主な考え方
2つのポインタが必要です.1つはcurrentNodeを指し、1つはprevNodeを指します.各操作はcurrentNodeのnextを前のノードに指し,操作前にcurrentNodeのnext位置を記録することに注意する.
初期化:currentNodeはチェーンテーブルの先頭要素を指し、prevNodeは空です.循環体: currentNodeのpNextをtempで保存します. 主な操作:currentNodeのnextをprevNodeに向けます. prevNodeとcurrentNodeを更新します.
コードは次のとおりです.
まちがったところ
1、単一チェーンテーブルノード定義コンパイルレポートwarningは以下の通りである.
エラー定義:
正しい定義:
2、関数のパラメータタイプ定義エラーの定義:
正しい定義:
ポインタの指す内容を変えたいなら、チラシポインタok.この例では、ノードの値を変更したい場合は、ノード*を渡します.ポインタの指す位置を変更したい場合は、ダブルポインタを渡します.
反転単一チェーンテーブル例:元のチェーンテーブル:1->2->3->4現地で反転、反転後:4->3->2->1
主な考え方
2つのポインタが必要です.1つはcurrentNodeを指し、1つはprevNodeを指します.各操作はcurrentNodeのnextを前のノードに指し,操作前にcurrentNodeのnext位置を記録することに注意する.
初期化:currentNodeはチェーンテーブルの先頭要素を指し、prevNodeは空です.循環体:
コードは次のとおりです.
void ReverseList(LinkList** pList){
if (*pList == NULL) {
return;
}
Node* pCurrent = *pList;
Node* pPrev = NULL;
while(pCurrent){
Node *pNext = pCurrent->pNext;
pCurrent->pNext = pPrev;
pPrev = pCurrent;
pCurrent = pNext;
}
if (pPrev) {
*pList = pPrev;
}
}
まちがったところ
1、単一チェーンテーブルノード定義コンパイルレポートwarningは以下の通りである.
algorithm/list.c:19:15: warning: incompatible pointer types initializing 'Node *' with an expression of type 'struct Node *' [-Wincompatible-pointer-types]
エラー定義:
typedef struct{
int val;
struct Node *pNext;
}Node;
正しい定義:
typedef struct Node{
int val;
struct Node *pNext;
}Node;
2、関数のパラメータタイプ定義エラーの定義:
void ReverseList(LinkList* pList)
正しい定義:
void ReverseList(LinkList** pList)
ポインタの指す内容を変えたいなら、チラシポインタok.この例では、ノードの値を変更したい場合は、ノード*を渡します.ポインタの指す位置を変更したい場合は、ダブルポインタを渡します.