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

Chia danh sách liên kết đã cho thành hai danh sách có tỷ lệ kích thước p:q trong Chương trình C ++

Trong hướng dẫn này, chúng ta sẽ viết một chương trình chia danh sách liên kết đã cho thành tỷ lệ p:q

Đó là một chương trình đơn giản. Hãy xem các bước để giải quyết vấn đề.

  • Tạo cấu trúc cho nút danh sách được liên kết.

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

  • Khởi tạo tỷ lệ p:q.

  • Tìm độ dài của danh sách được liên kết.

  • Nếu độ dài của danh sách được liên kết nhỏ hơn p + q, thì không thể chia liên kết thành tỷ lệ p:q.

  • Nếu không, hãy lặp lại danh sách được liên kết cho đến p.

  • Sau lần lặp p, hãy xóa liên kết và tạo phần đầu mới cho danh sách được liên kết thứ hai.

  • Bây giờ, hãy in hai phần của danh sách được liên kết.

Ví dụ

Hãy xem mã.

#include<bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *next;
   Node(int data) {
      this->data = data;
      this->next = NULL;
   }
};
void printLinkedList(Node* head) {
   Node *temp = head;
   while (temp) {
      cout << temp->data << " -> ";
      temp = temp->next;
   }
   cout << "NULL" << endl;
}
void splitLinkedList(Node *head, int p, int q) {
   int n = 0;
   Node *temp = head;
   // finding the length of the linked list
   while (temp != NULL) {
      n += 1;
      temp = temp->next;
   }
   // checking wether we can divide the linked list or not
   if (p + q > n) {
      cout << "Can't divide Linked list" << endl;
   }
   else {
      temp = head;
      while (p > 1) {
         temp = temp->next;
         p -= 1;
      }
      // second head node after splitting
      Node *head_two = temp->next;
      temp->next = NULL;
      // printing linked lists
      printLinkedList(head);
      printLinkedList(head_two);
   }
}
int main() {
   Node* head = new Node(1);
   head->next = new Node(2);
   head->next->next = new Node(3);
   head->next->next->next = new Node(4);
   head->next->next->next->next = new Node(5);
   head->next->next->next->next->next = new Node(6);
   int p = 2, q = 4;
   splitLinkedList(head, p, q);
}

Đầu ra

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

1 -> 2 -> NULL
3 -> 4 -> 5 -> 6 -> NULL

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.