Computer >> Máy Tính >  >> Lập trình >> C ++

Xóa tất cả các nút không phải chính khỏi danh sách được liên kết đơn lẻ trong C ++

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách xóa tất cả các nút chính khỏi một danh sách được liên kết đơn lẻ.

Hãy xem các bước để giải quyết vấn đề.

  • Viết cấu trúc với dữ liệu và con trỏ tiếp theo.

  • Viết một hàm để chèn nút vào danh sách được liên kết đơn lẻ.

  • Khởi tạo danh sách được liên kết riêng với dữ liệu giả.

  • Lặp lại danh sách được liên kết đơn lẻ. Tìm xem dữ liệu nút hiện tại có phải là số nguyên tố hay không.

  • Nếu dữ liệu hiện tại không phải là số nguyên tố, thì hãy xóa nút.

  • Viết hàm xóa nút. Hãy xem xét ba trường hợp sau khi xóa nút.

    • Nếu nút là nút đầu, thì hãy chuyển phần đầu sang nút tiếp theo.

    • Nếu nút là nút giữa, thì hãy liên kết nút tiếp theo với nút trước đó

    • Nếu nút là nút kết thúc, hãy xóa liên kết nút trước đó.

Ví dụ

Hãy xem mã.

#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;
}
bool isPrime(int n) {
   if (n <= 1) {
      return false;
   }
   if (n <= 3) {
      return true;
   }
   if (n % 2 == 0 || n % 3 == 0) {
      return false;
   }
   for (int i = 5; i * i <= n; i = i + 6) {
      if (n % i == 0 || n % (i + 2) == 0) {
         return false;
      }
   }
   return true;
}
void deleteNonPrimeNodes(Node** head_ref) {
   Node* ptr = *head_ref;
   while (ptr != NULL && !isPrime(ptr->data)) {
      Node *temp = ptr;
      ptr = ptr->next;
      delete(temp);
   }
   *head_ref = ptr;
   if (ptr == NULL) {
      return;
   }
   Node *curr = ptr->next;
   while (curr != NULL) {
      if (!isPrime(curr->data)) {
         ptr->next = curr->next;
         delete(curr);
         curr = ptr->next;
      }
      else {
         ptr = curr;
         curr = curr->next;
      }
   }
}
void printLinkedList(Node* head) {
   while (head != NULL) {
      cout << head->data << " -> ";
      head = head->next;
   }
}
int main() {
   Node* head = NULL;
   insertNode(&head, 1);
   insertNode(&head, 2);
   insertNode(&head, 3);
   insertNode(&head, 4);
   insertNode(&head, 5);
   insertNode(&head, 6);
   cout << "Linked List before deletion:" << endl;
   printLinkedList(head);
   deleteNonPrimeNodes(&head);
   cout << "\nLinked List after deletion:" << endl;
   printLinkedList(head);
}

Đầu ra

Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.

Linked List before deletion:
6 -> 5 -> 4 -> 3 -> 2 -> 1 ->
Linked List after deletion:
5 -> 3 -> 2 ->

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.