C++を使用してリンクリストの最後のノードを削除する
単一リンクリストが提供され、そのリストから最後のノードを削除する必要があります。この問題では、指定されたリストをトラバースして、最後のノードを削除するだけです。
解決策を見つけるためのアプローチ
このアプローチでは、指定されたリストを調べ、前のノードと現在のノードを追跡します。現在のノードが最後のノードになったら、前の-> NULLの横を変更し、現在のノードを削除します。
例
#include <iostream> using namespace std; struct Node { int data; struct Node* next; }; void push(struct Node** ref, int new_data) { // pushing the node struct Node* new_n = new Node; new_n->data = new_data; new_n->next = (*ref); (*ref) = new_n; } int main() { Node* head = NULL; push(&head, 12); push(&head, 29); push(&head, 11); push(&head, 23); push(&head, 8); auto curr = head, prev = head; if (!curr || !curr -> next) // if list only has one element or the list is empty cout << "Empty\n"; else { while (curr) { // while curr != NULL if (!curr -> next) { prev -> next = NULL; delete(curr); // freeing the space break; } prev = curr; curr = curr -> next; // moving to the next node } } for (Node* temp = head; temp != NULL; temp = temp->next) // printing the data cout << temp->data << " "; return 0; }
出力
8 23 11 29
上記のコードの説明
このアプローチでは、現在のノードと前のノードを追跡しながら、配列をトラバースします。現在のノードが最後のノードになったら、NULLの横にある前->を変更し、現在のノードを削除します。指定されたプログラムの全体的な時間計算量はO(N)です。ここで、Nは指定されたリストのサイズです。
時間計算量-O(N)
N:配列のサイズ
結論
この記事では、指定されたリンクリストから最後のノードを削除する問題を解決します。また、この問題のC ++プログラムと、解決した完全なアプローチについても学びました。同じプログラムを、C、java、python、その他の言語などの他の言語で作成できます。この記事がお役に立てば幸いです。
-
C++の循環リンクリストのノードの合計
この問題では、循環リンクリストが表示されます。私たちのタスクは、循環リンクリストのノードの合計を見つけるプログラムを作成することです。 リンクリストのすべてのノード値を追加するだけです。 いくつかの重要な定義 リンクリストは一連のデータ構造であり、リンクを介して相互に接続されています。 循環リンクリストは、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すリンクリストのバリエーションです。単一リンクリストと二重リンクリストの両方を循環リンクリストにすることができます。 では、問題を理解するために例を見てみましょう。 入力 14 ->
-
C++で二重にリンクされたリストを使用した優先キュー
データと優先度は整数値として与えられ、タスクは与えられた優先度に従って二重にリンクされたリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先