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

C++プログラムでリンクリストの中央を削除します


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

問題の解決策は簡単です。 1つは一度に1つのノードを移動し、もう1つは一度に2つのノードを移動する2つのポインターがあります。 2番目のポインターが最後のノードに到達するまでに、最初のポインターはリンクリストの中央に配置されます。

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

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

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

  • リンクリストを削除する関数を記述します。

    • リンクリストヘッドポインタを使用して、2つのポインタ(低速および高速)を初期化します。

    • 高速ポインタが最後に到達するまで、リンクリストを繰り返し処理します。

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

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

    • ヘッドポインタを返す

  • リンクリストを印刷します。

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

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node* next;
};
struct Node* deleteMiddleNode(struct Node* head) {
   if (head == NULL) {
      return NULL;
   }
   if (head->next == NULL) {
      delete head;
      return NULL;
   }
   struct Node* slow_ptr = head;
   struct Node* fast_ptr = head;
   struct Node* prev;
   while (fast_ptr != NULL && fast_ptr->next != NULL) {
      fast_ptr = fast_ptr->next->next;
      prev = slow_ptr;
      slow_ptr = slow_ptr->next;
   }
   prev->next = slow_ptr->next;
   delete slow_ptr;
   return head;
}
void printLinkedList(struct Node* node) {
   while (node != NULL) {
      cout << node->data << " -> ";
      node = node->next;
   }
   cout << "Null" << endl;
}
Node* newNode(int data) {
   struct Node* temp = new Node;
   temp->data = data;
   temp->next = NULL;
   return temp;
}
int main() {
   struct Node* head = newNode(1);
   head->next = newNode(2);
   head->next->next = newNode(3);
   head->next->next->next = newNode(4);
   head->next->next->next->next = newNode(5);
   head->next->next->next->next->next = newNode(6);
   cout << "Linked list before deleting middle node: ";
   printLinkedList(head);
   head = deleteMiddleNode(head);
   cout << "Linked List after deleting middle node: ";
   printLinkedList(head);
   return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます。

Linked list before deleting middle node: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> Null
Linked List after deleting middle node: 1 -> 2 -> 3 -> 5 -> 6 -> Null

結論

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


  1. C++でマルチレベルリンクリストをフラット化する

    この問題では、マルチレベルのリンクリストが提供されます。私たちの仕事は、マルチレベルのリンクリストをフラット化するプログラムを作成することです。 平坦化操作は、リンクリストで最初に第1レベルのノードが発生し、次に第2レベルのノードが発生するように実行されます。 マルチレベルリンクリスト は多次元データ構造であり、リンクリストのすべてのノードに2つのリンクポインタがあります。1つは次のノードへのリンクで、もう1つは1つ以上のノードを持つ子リストへのリンクです。この子ポインタは、他のリストノードを指している場合とそうでない場合があります。 例 問題を理解するために例を見てみましょう

  2. Pythonでリンクリストのノードを削除する

    いくつかの要素を持つリンクリストがあるとします。私たちのタスクは、リストから特定のノードを削除する関数を作成することです。したがって、リストが1→3→5→7→9のようで、3を削除すると、1→5→7→9になります。 削除するノードを指すポインタ「ノード」があるとすると、ノードを削除するにはこれらの操作を実行する必要があります- node.val =node.next.val node.next =node.next.next 例(Python) 理解を深めるために、次の実装を見てみましょう- class ListNode:    def __init__(se