最後の要素をC++の特定のリンクリストの前に移動します
リンクリストが与えられた場合、最後の要素を前に移動する必要があります。例を見てみましょう。
入力
1 -> 2 -> 3 -> 4 -> 5 -> NULL
出力
5 -> 1 -> 2 -> 3 -> 4 -> NULL
アルゴリズム
-
リンクリストを初期化します。
- リンクリストが空であるか、単一ノードである場合に戻ります。
-
リンクリストの最後のノードと最後から2番目のノードを見つけます。
-
最後のノードを新しいヘッドにします。
-
最後から2番目のノードのリンクを更新します。
実装
以下は、C++での上記のアルゴリズムの実装です
#include <bits/stdc++.h> using namespace std; struct Node { int data; struct Node* next; }; void moveFirstNodeToEnd(struct Node** head) { if (*head == NULL || (*head)->next == NULL) { return; } struct Node* secondLastNode = *head; struct Node* lastNode = *head; while (lastNode->next != NULL) { secondLastNode = lastNode; lastNode = lastNode->next; } secondLastNode->next = NULL; lastNode->next = *head; *head = lastNode; } void addNewNode(struct Node** head, int new_data) { struct Node* newNode = new Node; newNode->data = new_data; newNode->next = *head; *head = newNode; } void printLinkedList(struct Node* node) { while (node != NULL) { cout << node->data << "->"; node = node->next; } cout << "NULL" << endl; } int main() { struct Node* head = NULL; addNewNode(&head, 1); addNewNode(&head, 2); addNewNode(&head, 3); addNewNode(&head, 4); addNewNode(&head, 5); addNewNode(&head, 6); addNewNode(&head, 7); addNewNode(&head, 8); addNewNode(&head, 9); moveFirstNodeToEnd(&head); printLinkedList(head); return 0; }
出力
上記のコードを実行すると、次の結果が得られます。
1->9->8->7->6->5->4->3->2->NULL
-
C++で指定された数kで割り切れるリンクリストの最大要素と最小要素
リンクリストは、要素がポインタを介してリンクされている線形データ構造です。リンクリストの各要素またはノードには、データ部分とリンクがあります。または、次の要素へのポインタを順番に言うことができます。要素は、メモリ内で連続していない場所を取ることができます。 データ部分と次の要素へのリンクがある単一リンクリストが与えられます。もう1つの入力は数値Kです。タスクは、数値Kで割り切れるリンクリストの最大要素と最小要素を見つけることです。線形リンクリストは、一方向にのみ移動できます。各ノードで、データ部分の分割可能性をKで確認します。その数がこれまでに見つかった最大値または最小値である場合は、
-
C++で指定されたリンクリストの最後のNノードの積を検索します
リンクリストにいくつかの要素があると考えてください。最後のn個の要素の乗算結果を見つける必要があります。 nの値も示されています。したがって、リストが[5、7、3、5、6、9]のようで、n =3の場合、結果は5 * 6 * 9=270になります。 プロセスは簡単です。左側から現在の要素を読み取り、要素をスタックに追加するだけです。スタックを埋めた後、n個の要素を削除し、それらにprodを掛けます。 (最初はprodは1です)、n個の要素がトラバースされたら、停止します。 例 #include<iostream> #include<stack> using names