チェーンテーブルの中で最後からK番目のノードを求めます
1397 ワード
この問題は本当に簡単に答えることができて、同時に面接問題の中でとてもよくある問題で、この問題を出して言うのは、自分がコードを書く習慣を強めるためで、技術面接のHRに自分のすごい様子を見てもらうためです.アルゴリズムのテーマを設計するときは、一定のスムーズさに従うのが良い習慣です.
1>アルゴリズム設計--戦略を立て、千里の外に勝つ
複雑なアルゴリズムに遭遇した場合、図面(ツリー、図などのデータ構造のアルゴリズム)、例(まずいくつかの小さな例を利用して問題を整理する)、小さなサブ問題(分治または動的計画の問題)に分けることができる.
2>試験用例の作成--兵馬が動かず、食糧草が先行する
注意境界条件入力、特殊入力、エラー処理など.
3>コード実装
4>デバッグBug
ブレークポイントを設定し、単一ステップで追跡し、メモリを表示し、呼び出しスタックを分析します.問題を迅速に見つけ、解決することができます.
チェーンテーブルの最後からK番目のノードを求める問題に対して、ここではテスト用例の作成だけをリストして、この部分はとても重要で、軽視してはいけません!
最後のコード実装:
Bugをデバッグしたところ、whileサイクルでptr->nextが空の値に等しいかどうかではなく、ptrが空の値に等しいかどうかを判断した場合、正しい結果は得られないことが分かった.だから上のアルゴリズムの設計手順は重要です.
1>アルゴリズム設計--戦略を立て、千里の外に勝つ
複雑なアルゴリズムに遭遇した場合、図面(ツリー、図などのデータ構造のアルゴリズム)、例(まずいくつかの小さな例を利用して問題を整理する)、小さなサブ問題(分治または動的計画の問題)に分けることができる.
2>試験用例の作成--兵馬が動かず、食糧草が先行する
注意境界条件入力、特殊入力、エラー処理など.
3>コード実装
4>デバッグBug
ブレークポイントを設定し、単一ステップで追跡し、メモリを表示し、呼び出しスタックを分析します.問題を迅速に見つけ、解決することができます.
チェーンテーブルの最後からK番目のノードを求める問題に対して、ここではテスト用例の作成だけをリストして、この部分はとても重要で、軽視してはいけません!
// ,head k
1. head = NULL
2. k <= 0
2. k
最後のコード実装:
ListNode* FindKthToTail(ListNode* head, int k)
{
if(NULL == head)
{
return NULL;
}
if(k <= 0)
{
return NULL;
}
ListNode *ptr = head;
for(int i = 0; i < k - 1 && NULL != ptr; i++)
{
ptr = ptr->next;
}//for
if(NULL == ptr)
{
return NULL;
}//if
ListNode *pcur = head;
while(NULL != ptr->next)
{
ptr = ptr->next;
pcur = pcur->next;
}//while
return pcur;
}
Bugをデバッグしたところ、whileサイクルでptr->nextが空の値に等しいかどうかではなく、ptrが空の値に等しいかどうかを判断した場合、正しい結果は得られないことが分かった.だから上のアルゴリズムの設計手順は重要です.