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

C ++を使用して、指定された単一リンクリストからテールノードを削除します


リンクリストは、ノードを含む線形データ構造であり、各ノードには2つのフィールドがあります。 1つは挿入される値またはデータであり、もう1つのフィールドは次のノードのアドレスを格納します。

ここでのタスクは、リンクリストの最後からノードを削除することです。最後のノードはテールノードと呼ばれます。リンクリストにノードがない場合は、NULLを返します。

例-

入力1 −1→2→3→4→5

出力 −1→2→3→4→

説明 −与えられた単一リンクリストでは、最後からのノードは「5」です。最後のノードを削除すると、出力は1→2→3→4→になります。

入力2 −5→8→3

出力 −5→8→

説明 −与えられた単一リンクリストでは、最後からのノードは「3」です。ノードを最後から削除すると、出力は5→8→。

になります。

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

この特定の問題を解決する簡単なアプローチは、現在のポインタがリンクリストの最後のノードを指すときに、後で現在のノードの値を格納する前のノードを作成することです。

現在のノードが最後のノードを指している場合は、リンクリストのすべてのノードを繰り返し処理します。そして最後に、リンクリストから戻ります。

  • ノードをリストに挿入して、リンクリストを初期化します。

  • 関数insertAtFirst(node *&head、int data)は、リンクリスト内のすべてのノードを挿入します。

  • 関数deleteAtTail(node * head)は、現在ヘッドを指しているポインターを取ります。

  • 前のノードポインタを作成し、NULLとして初期化します。

  • 現在ポインタの先頭を指している一時的なノードポインタを作成します。

  • リンクリストの最後に到達しなくなるまで、一時ポインタをトラバースします。

  • 一時ポインタの値を前のノードポインタに格納します。

  • 一時ポインタを削除します。

  • リンクリストを返します。

#include<iostream>
using namespace std;
class node{
   public:
   int data;
   node*next;
   node(int d){
      data=d;
      node*next= NULL;
   }
};
void insertAtFirst(node*&head, int data){
   node*n= new node(data);
   n->next= head;
   head=n;
}
void printNode(node*head){
   while(head!=NULL){
      cout<<head->data<<"->";
      head=head->next;
   }
   cout<<endl;
}
void deleteatTail(node*head){
   node*prev= NULL;
   node*temp= head;
   while(temp->next!=NULL){
      prev= temp;
      temp=temp->next;
   }
   delete temp;
   prev->next= NULL;
   return;
}
int main(){
   node*head= NULL;
   insertAtFirst(head,5);
   insertAtFirst(head,4);
   insertAtFirst(head,3);
   insertAtFirst(head,2);
   insertAtFirst(head,1);
   deleteatTail(head);
   printNode(head);
}

出力

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

1→2→3→4→

指定された入力単一リンクリスト(1→2→3→4→5)では、リンクリストの最後のノードは「5」です。したがって、最後のノードを削除すると、リンクリストは1→2→3→4→になります。


  1. C++の特定の位置にある二重リンクリストノードを削除します

    このチュートリアルでは、指定された位置にある二重リンクリストのノードを削除する方法を学習します。 問題を解決するための手順を見てみましょう。 データ、前のポインタ、次のポインタを使用して構造体を記述します。 ノードを二重リンクリストに挿入する関数を記述します。 ダミーデータを使用して二重リンクリストを初期化します。 ノードを削除する位置を初期化します。 リンクリストを繰り返し処理し、指定された位置にあるノードを見つけて、ノードを削除します。 ノードを削除する関数を記述します。ノードを削除するときは、次の3つのケースを考慮してください。 ノードがヘッド

  2. 循環単一リンクリストを実装するためのC++プログラム

    循環単一リンクリストは、自己参照構造を使用して作成されたノードで構成されるデータ構造の一種です。これらの各ノードには、データと次のリストノードへの参照という2つの部分が含まれています。 リンクリスト全体にアクセスするには、最初のリストノードへの参照のみが必要です。これは頭​​として知られています。リストの最後のノードは、リストの先頭または最初のノードを指します。これが循環リンクリストとして知られている理由です。 循環単一リンクリストを実装するプログラムは次のとおりです。 例 #include <iostream> using namespace std; struct Node