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

C++のシングルトラバーサルでリンクリストの最後から2番目のノードを検索します


次に、リンクリストの最後から2番目の要素を取得する方法を説明します。 [10、52、41、32、69、58、41]のような要素が少なく、最後から2番目の要素が58であるとします。

この問題を解決するために、1つは現在のノードを指し、もう1つは現在の位置の前のノードを指す、2つのポインターを使用します。次に、現在の次のノードがnullになるまで移動し、前のノードを返します。

#include<iostream>
using namespace std;
class Node {
   public:
      int data;
      Node *next;
};
void prepend(Node** start, int new_data) {
   Node* new_node = new Node;
   new_node->data = new_data;
   new_node->next = NULL;
   if ((*start) != NULL){
      new_node->next = (*start);
      *start = new_node;
   }
   (*start) = new_node;
}
int secondLastElement(Node *start) {
   Node *curr = start, *prev = NULL;
   while(curr->next != NULL){
      prev = curr;
      curr = curr->next;
   }
   return prev->data;
}
int main() {
   Node* start = NULL;
   prepend(&start, 15);
   prepend(&start, 20);
   prepend(&start, 10);
   prepend(&start, 9);
   prepend(&start, 7);
   prepend(&start, 17);
   cout << "Second last element is: " << secondLastElement(start);
}

出力

Second last element is: 20

  1. C++のツリー内の特定のサブツリーのDFSトラバーサルでK番目のノードを検索します

    この問題では、サイズNのツリー、ツリーVおよびkのノードが与えられます。私たちのタスクは、ツリー内の特定のサブツリーのDFSトラバーサルでK番目のノードを見つけることです。 。 頂点Vから始まるツリーのDFSトラバーサルでk番目のノードを見つける必要があります。 問題を理解するために例を見てみましょう 入力: V =2、k =3 出力:4 説明 − The series is {1, 2, 3, 5, 6, 7} The 4th element is 5. ソリューションアプローチ この問題の簡単な解決策は、ノードVのDFSトラバーサルを見つけて、そこからk番目の値

  2. C++で順序トラバーサルのn番目のノードを検索します

    この問題では、二分木と整数Nが与えられます。タスクは、二分木を順番に走査するn番目のノードを見つけることです。 二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。 トラバーサルは、ツリーのすべてのノードにアクセスするプロセスであり、それらの値も出力する場合があります。 問題を理解するために例を見てみましょう 入力 N = 6 出力 3 説明 inorder traversal of tree : 4, 2, 5, 1, 6, 3, 7 ソリューションアプローチ アイデアは、再帰呼び出しを使用して実行されるバイナリツリーの順序どおりのトラバーサルを使