C++で最初の要素を特定のリンクリストの最後に移動します
<
リンクリストを指定すると、最初の要素を最後に移動する必要があります。例を見てみましょう。
入力
1 -> 2 -> 3 -> 4 -> 5 -> NULL
出力
2 -> 3 -> 4 -> 5 -> 1 -> NULL
アルゴリズム
-
リンクリストを初期化します。
- リンクリストが空であるか、単一ノードである場合に戻ります。
-
リンクリストの最後のノードを見つけます。
-
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* firstNode = *head;
struct Node* lastNode = *head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
*head = firstNode->next;
firstNode->next = NULL;
lastNode->next = firstNode;
}
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;
} 出力
上記のコードを実行すると、次の結果が得られます。
8->7->6->5->4->3->2->1->9->NULL
-
C++で指定された数kで割り切れるリンクリストの最大要素と最小要素
リンクリストは、要素がポインタを介してリンクされている線形データ構造です。リンクリストの各要素またはノードには、データ部分とリンクがあります。または、次の要素へのポインタを順番に言うことができます。要素は、メモリ内で連続していない場所を取ることができます。 データ部分と次の要素へのリンクがある単一リンクリストが与えられます。もう1つの入力は数値Kです。タスクは、数値Kで割り切れるリンクリストの最大要素と最小要素を見つけることです。線形リンクリストは、一方向にのみ移動できます。各ノードで、データ部分の分割可能性をKで確認します。その数がこれまでに見つかった最大値または最小値である場合は、
-
C++で指定されたリンクリストの最初のkノードの積を検索します
リンクリストにいくつかの要素があると考えてください。最初のk個の要素の乗算結果を見つける必要があります。 kの値も示されています。したがって、リストが[5、7、3、5、6、9]のようで、k =3の場合、結果は5 * 7 * 3=105になります。 プロセスは簡単です。左側から現在の要素を読み取り、それをprodで乗算するだけです。 (最初はprodは1です)、k個の要素がトラバースされたら、停止します。 例 #include<iostream> #include<cmath> using namespace std; class Node{