C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++を使用して、特定の単一リンクリストの最後からK番目のノードを検索します


リンクリストは、相互に接続された複数のノードを持つ線形データ構造です。各ノードは、データフィールドと次のノードのアドレスの2つのフィールドで構成されます。単一リンクリストを指定したと仮定します。タスクは、指定された単一リンクリストの最後からk番目のノードを見つけることです。たとえば、

入力

1→2→3→4→7→8→9
K= 4

出力

Node from the 4th Position is − 4

説明 −指定された単一リンクリストでは、最後から「4番目」のノードが「4」であるため、出力を「4」として返します。

この問題を解決するためのアプローチ

最初に、ノードで構成されるリンクリストを提供しました。各ノードには、次のノードへのデータとアドレスが含まれています。したがって、最後からk番目のノードを見つけるために、最初にリンクリストの先頭を指す2つのポインターを取得します。

リンクリストを繰り返しながら、一方のポインタを「高速」と言って移動し、もう一方のポインタを「高速」ポインタが最後に到達しなくなるまで移動します。

  • 関数kthNodefromTheEnd(node * head、int pos)は、ヘッドノードへのポインターと位置をパラメーターとして受け取り、ノードを最後から返します。

  • 最初は先頭にある「遅い」と「速い」の2つのポインタを見てみましょう。

  • リンクリストを繰り返し処理し、高速ポインタを移動します。

  • 「速い」ポインタは「遅い」より2ステップ進んでいるので、「速い」が最後に達するまで両方のポインタを動かしてみましょう。

  • ここで、最後からk番目のノードを指すslowの値を返します。

#include<iostream>
using namespace std;
class node{
public:
   int data;
   node*next;
   node(int d){
      data=d;
      next=NULL;
   }
};
void insertAthead(node*&head,int d){
   node*n= new node(d);
   n->next= head;
   head=n;
}
void printList(node*head){
   while(head!=NULL){
      cout<<head->data<<"-->";
      head= head->next;
   }
}
void kthFromtheEnd(node*head, int k){
   node*slow= head;
   node*fast= head;
   for(int i=0;i<k;i++){
      fast= fast->next;
   }
   while(fast!=NULL){
      slow= slow->next;
      fast= fast->next;
   }
   cout<<"Node from the "<<k<<"th position is"<<slow->data<<endl;
}
int main(){
   node*head= NULL;
   insertAthead(head,2);
   insertAthead(head,4);
   insertAthead(head,5);
   insertAthead(head,6);
   insertAthead(head,7);
   printList(head);
   cout<<endl;
   kthFromtheEnd(head,4);
   return 0;
}

出力

上記のコードを実行すると、次のように出力が生成されます

Node from the 4th position is: 6

説明 −指定されたリンクリストは7→6→5→4→2→であり、k番目の値は「4」です。したがって、最後から4番目のノードは「6」なので、「6」を返します。


  1. C++を使用してリンクリストの最初のノードを削除します

    リンクリストを指定したら、最初の要素を削除して、新しいリストの先頭へのポインタを返す必要があります。 Input : 1 -> 2 -> 3 -> 4 -> 5 -> NULL Output : 2 -> 3 -> 4 -> 5 -> NULL Input : 2 -> 4 -> 6 -> 8 -> 33 -> 67 -> NULL Output : 4 -> 6 -> 8 -> 33 -> 67 -> NULL 与えられた問題では、リストの最初のノードを削除し、頭を2番

  2. C ++を使用して、指定されたポイントから可能な四辺形の数を見つけます

    四辺形は、ユークリッド平面幾何学で4つの頂点と4つのエッジを持つポリゴンを形成します。名前4-gonなど。四辺形の他の名前に含まれ、正方形、表示スタイルなどとしても知られています。 この記事では、与えられた点から可能な四辺形の数を見つけるためのアプローチを説明します。この問題では、デカルト平面に提供された4つの点(x、y)を使用して作成できる四辺形の数を調べる必要があります。だからここに与えられた問題の例があります- Input : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) Output : 1 Explanation : One quadr