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

C++プログラムのリンクリストのMノードの後に​​Nノードを削除します


このチュートリアルでは、 Nを削除する方法を学習します。 Mの後のノード リンクリスト内のノード。

問題を解決するための手順を見てみましょう。

  • リンクリストノードの構造体ノードを記述します。

  • リンクリストをダミーデータで初期化します。

  • Mノードの後に​​Nノードを削除する関数を記述します。

    • ヘッドポインタでポインタを初期化します。

    • リンクリストの最後まで繰り返します。

    • Mノードになるまでポインタを次のノードに移動します。

    • N個のノードを削除します

    • ポインタを次のノードに移動します

  • リンクリストを印刷する

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *next;
};
void insertNode(Node ** head_ref, int new_data) {
   Node* new_node = new Node();
   new_node->data = new_data;
   new_node->next = (*head_ref);
   *head_ref = new_node;
}
void printLinkedList(Node *head) {
   Node *temp = head;
   while (temp != NULL) {
      cout<< temp->data << " -> ";
      temp = temp->next;
   }
   cout << "Null" << endl;
}
void deleteNNodesAfterMNodes(Node *head, int M, int N) {
   Node *current = head, *temp;
   int count;
   while (current) {
      // skip M nodes
      for (count = 1; count < M && current!= NULL; count++) {
         current = current->next;
      }
      // end of the linked list
      if (current == NULL) {
         return;
      }
      // deleting N nodes after M nodes
      temp = current->next;
      for (count = 1; count <= N && temp != NULL; count++) {
         Node *deletingNode = temp;
         temp = temp->next;
         free(deletingNode);
      }
      current->next = temp;
      current = temp;
   }
}
int main() {
   Node* head = NULL;
   int M = 1, N = 2;
   insertNode(&head, 1);
   insertNode(&head, 2);
   insertNode(&head, 3);
   insertNode(&head, 4);
   insertNode(&head, 5);
   insertNode(&head, 6);
   insertNode(&head, 7);
   insertNode(&head, 8);
   insertNode(&head, 9);
   cout << "Linked list before deletion: ";
   printLinkedList(head);
   deleteNNodesAfterMNodes(head, M, N);
   cout << "Linked list after deletion: ";
   printLinkedList(head);
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

Linked list before deletion: 9 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> Null
Linked list after deletion: 9 -> 6 -> 3 -> Null

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C ++で再帰を使用して、リンクリストの代替ノードを出力します

    リンクリストは、要素を連続していないメモリ位置に格納する線形データ構造です。すべての要素には、リンクリストの次の要素へのポインタが含まれています。 例 − この問題では、リンクリストが与えられ、このリンクリストの要素を印刷する必要がありますが、代替要素のみが印刷されます。問題をよりよく理解するために例を見てみましょう。 Input : 2 -> 4 -> 1 -> 67 -> 48 -> 90 Output : 2 -> 1 -> 48 説明 −リンクリストに代替要素を出力します。したがって、1番目、3番目、5番目の要素が印刷されます。

  2. Pythonのリンクリストからmノードの後に​​nノードを削除するプログラム

    開始ノードが「head」で、2つの整数mとnを持つリンクリストが与えられたとします。リストをトラバースして、最初のmノードがリストに保持され、最初のmノードが削除された後の次のnノードなどのいくつかのノードを削除する必要があります。リンクリストの最後に到達するまでこれを実行します。ヘッドノードから開始し、変更されたリンクリストが返されます。 リンクリスト構造は-として与えられます Node    value : <integer>    next : <pointer to next node> したがって、入力が要素=[1、