ইনপুট হিসাবে একটি একক লিঙ্ক তালিকা দেওয়া হয়েছে. মূল তালিকার বিকল্প নোড আছে এমন দুটি একক লিঙ্কযুক্ত তালিকায় তালিকাটিকে বিভক্ত করা লক্ষ্য। যদি ইনপুট তালিকায় নোড থাকে a → b → c → d → e → f তাহলে বিভক্ত হওয়ার পরে, দুটি উপ-তালিকা হবে একটি → c → e এবং b → d → f৷
আমরা N1 এবং N2 দুটি পয়েন্টার নেব যার একটি মূল তালিকার মাথার দিকে নির্দেশ করে এবং আরেকটি → পরের দিকে নির্দেশ করে। এখন উভয় পয়েন্টারকে পরবর্তী নোডের পরবর্তীতে নিয়ে যান এবং সাবলিস্ট তৈরি করুন।
উদাহরণ
ইনপুট − তালিকা :- 1 → 5 → 7 → 12 → 2 → 96 → 33
আউটপুট − মূল তালিকা :1 5 7 12 2 96 33
তালিকা 1:1 7 2 33
তালিকা 2:5 12 96
ব্যাখ্যা − 1 এবং 5 থেকে শুরু করুন এবং উপরে দেখানো সাবলিস্ট তৈরি করতে বিকল্প নোডের পরবর্তী পয়েন্টে যান৷
ইনপুট − তালিকা :- 13 → 53 → 90 → 18 → 44 → 11→ 99 → 32
আউটপুট − মূল তালিকা :13 53 90 18 44 11 99 32
তালিকা 1:13 90 44 99
তালিকা 2:53 18 11 32
ব্যাখ্যা − 13 এবং 53 থেকে শুরু করুন এবং উপরে দেখানো সাবলিস্ট তৈরি করতে বিকল্প নোডের পরের পয়েন্টে যান৷
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
এই পদ্ধতিতে আমরা N1 এবং N2 দুটি পয়েন্টার নেব যার একটি মূল তালিকার মাথার দিকে নির্দেশ করে এবং আরেকটি → পরের দিকে নির্দেশ করে। এখন উভয় পয়েন্টারকে পরবর্তী নোডের পরবর্তীতে নিয়ে যান এবং সাবলিস্ট তৈরি করুন।
-
int ডেটা অংশ সহ স্ট্রাকচার নোড এবং পরবর্তী পয়েন্টার হিসাবে নোড নিন।
-
ফাংশন addtohead(Node** head, int data) এককভাবে লিঙ্ক করা তালিকা তৈরি করতে মাথায় নোড যোগ করতে ব্যবহৃত হয়।
-
প্রথম নোডের পয়েন্টার হিসাবে উপরের ফাংশনটি ব্যবহার করে একটি একক লিঙ্কযুক্ত তালিকা তৈরি করুন।
-
হেড নোড থেকে শুরু করে লিঙ্ক করা তালিকা প্রিন্ট করতে ফাংশন ডিসপ্লে (নোড* হেড) ব্যবহার করা হয়।
-
দুটি নোড পয়েন্টার node1 এবং node2 নিন।
-
ফাংশন স্প্লিটলিস্ট(নোড* হেড, নোড** n1, নোড** n2) নোড পয়েন্টার এবং পয়েন্ট n1 কে হেড এবং n2 থেকে হেড → মূল স্ট্রিং এর পরের দিকে নিয়ে যায়।
-
এর ভিতরে মূল তালিকাকে দুটি সাবলিস্টে বিভক্ত করতে স্প্লিট (*n1, *n2) কল করুন
-
ফাংশন বিভক্ত (নোড* N1, নোড* N2) N1 এবং N2 পয়েন্টার নেয় এবং মূল তালিকার বিকল্প নোড সহ দুটি সাবলিস্ট তৈরি করে।
-
যদি N1 এবং N2 উভয়ই শূন্য হয় তবে কিছুই ফেরত দেবেন না।
-
N1→ পরবর্তী শূন্য না হলে tmp=N1->next->next এবং N1->next =tmp;
সেট করুন। -
f N2→ পরবর্তী শূন্য না হলে tmp=N2->পরবর্তী->পরবর্তী এবং N2->পরবর্তী =tmp;
সেট করুন -
কল স্প্লিট (N1->পরবর্তী, N2->পরবর্তী); পরবর্তী পুনরাবৃত্তির জন্য।
-
শেষে প্রদর্শন() ব্যবহার করে সাবলিস্ট প্রিন্ট করুন।
উদাহরণ
#include <bits/stdc++.h> using namespace std; struct Node { int data; struct Node* next; }; void addtohead(Node** head, int data){ Node* nodex = new Node; nodex->data = data; nodex->next = (*head); (*head) = nodex; } void split(Node* N1, Node* N2){ Node *tmp; if (N1 == NULL || N2 == NULL){ return; } if (N1->next != NULL){ tmp=N1->next->next; N1->next = tmp; } if (N2->next != NULL){ tmp=N2->next->next; N2->next = tmp; } split(N1->next, N2->next); } void splitList(Node* head, Node** n1, Node** n2){ *n1 = head; *n2 = head->next; split(*n1, *n2); } void display(Node* head){ Node* curr = head; if (curr != NULL){ cout<<curr->data<<" "; display(curr->next); } } int main(){ Node* head = NULL; Node *node1 = NULL, *node2 = NULL; addtohead(&head, 20); addtohead(&head, 12); addtohead(&head, 15); addtohead(&head, 8); addtohead(&head, 10); addtohead(&head, 4); addtohead(&head, 5); cout<<"Original List :"<<endl; display(head); splitList(head, &node1, &node2); cout<<endl<<"List 1: "; display(node1); cout<<endl<<"List 2: "; display(node2); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে
Original List : 5 4 10 8 15 12 20 List 1: 5 10 15 20 List 2: 4 8 12