チェーンテーブルの最後からk番目のノードを求めます
649 ワード
タイトル説明:一方向チェーンテーブルを入力し、チェーンテーブルの最後からk番目のノードを出力し、チェーンテーブルの最後から0番目のノードがチェーンテーブルの最後のポインタである.
第1の反応は、まずチェーンテーブルを1回遍歴し、産度lを得、次にチェーンテーブルをl−kに遍歴し、需要ノードを得ることであり、この方法は最適ではない.
2つのポインタp,qを設定し,pとqの間をk個のノードから離し,p,qをチェーンテーブルに同期させてチェーンテーブルの末尾ノードに移動させるべきであるが,pは逆数k番目のノードを指す.
第1の反応は、まずチェーンテーブルを1回遍歴し、産度lを得、次にチェーンテーブルをl−kに遍歴し、需要ノードを得ることであり、この方法は最適ではない.
2つのポインタp,qを設定し,pとqの間をk個のノードから離し,p,qをチェーンテーブルに同期させてチェーンテーブルの末尾ノードに移動させるべきであるが,pは逆数k番目のノードを指す.
struct Node{
char data;
Node* next;
}
Node *p,*q;
Node* fun(Node *head,int k){
assert(k>=0);//
p=q=head;
for(;k>0&&q!=NULL;k--)
q=q->next;
if(k>0)return NULL;// k
while(q!=NULL){
p=p->next;
q=q->next;
}
return p;
}