リンクリストの下からK番目のノードを返します
トピック
可能な限り高い時間効率を使用して、リストが指す線形リンクリストの下部からK番目のノードを見つけるアルゴリズムを記述してください。見つかった場合は、そのノードの情報を返します。見つからない場合は、 NULLを返します。全国入学試験のコンピュータ試験の質問)。
制約事項:リンクリストの長さはアルゴリズムで許可されておらず、ポインター変数と制御変数以外の他の補助スペースは許可されていません。
分析
主なアイデアは3つのステップに分かれています。
- ステップ1:ポインターpがK番目のノードを指すようにします
- ステップ2:次に、リンクリストの初期位置(リストが指す位置)を指すようにポインターqを設定します。
- ステップ3:ループし、pとqを同時にリンクリストの最後に移動させます。pが最後のノードに移動すると、qが指すノードは下からK番目のノードになります。
コード
// 返回链表中倒数第K个结点
LinkList SEARCHBNODE(LinkList list ,int k){
LinkList p,q;
if (list!=NULL&&k>0){
p=list;
for (int i = 0; i < k; i++){
p=p->link;
if (p==NULL){
printf("链表中不存在这样的K点");
return NULL;
}
}
q=list;
while (p->link!=NULL){
p=p->link;
q=q->link;
}
}
return q;
}