リンクリストの下からK番目のノードを返します

リンクリストの下から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;    
}

おすすめ

転載: blog.csdn.net/honeylife/article/details/98945550