কম্পিউটার টিউটোরিয়াল

সি++-তে লিংকড লিস্টের নোড পেয়ারওয়াইজ সোয়াপ করার প্রোগ্রাম


মান ল করুন একটি লিংকড লিস্ট। আমাদের প্রতিটি দুটি আডজেসেন্ট নোড (পেয়ার) সোয়াপ করে এর হেড ফেরত দিতে হবে। কন্ডিশন হল নোডের মান পরিবর্তন করা যাবে না, শুধু নোডই পরিবর্তন করা যাবে। তাই লিস্ট [1,2,3,4] হলে ফলাফল হবে [2,1,4,3]।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:

  • যদি head নেই, তবে head ফেরত দিন
  • first := head, second := head.next, dummy হল -1 মান নিয়ে একটি নতুন নোড
  • dummy.next := first, prev := dummy
  • যখন second null না হয়:
    • temp := second.next
    • first.next := second.next
    • second.next := first
    • prev.next := second
    • prev := first
    • যদি temp থাকে, first := temp, second := temp.next, অন্যথায় ব্রেক
  • dummy.next ফেরত দিন

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

#include  using namespace std; class ListNode{ public:    int val;    ListNode *next;    ListNode(int data){       val = data;       next = NULL;    } }; ListNode *make_list(vector v){    ListNode *head = new ListNode(v[0]);    for(int i = 1; inext != NULL){          ptr = ptr->next;       }       ptr->next = new ListNode(v[i]);    }    return head; } void print_list(ListNode *head){    ListNode *ptr = head;    cout << "[";    while(ptr->next){       cout << ptr->val << ", ";       ptr = ptr->next;    }    cout << "]" << endl; } class Solution { public:    ListNode* swapPairs(ListNode* head) {       if(!head)return head;       ListNode* first= head;       ListNode* second = head->next;       ListNode* dummy = new ListNode(-1);       dummy->next = first;       ListNode* prev = dummy;       while(second){           ListNode* temp = second->next;           first->next = second->next;           second->next = first;           prev->next = second;           prev = first;           if(temp){                first = temp;                second = temp->next;           }           else break;       }       return dummy->next;    } }; main(){    Solution ob;    vector v = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};    ListNode *head = make_list(v);    print_list(ob.swapPairs(head)); }

ইনপুট

{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

আউটপুট

[2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13,]

  1. C++-এ সার্কুলার লিঙ্কড লিস্টে নোড গণনা

  2. পাইথনে লিংকড লিস্ট থেকে m নোডের পর n নোড ডিলিট করার প্রোগ্রাম

  3. সি++-তে লিংকড লিস্টের নোড পেয়ারওয়াইজ সোয়াপ করার প্রোগ্রাম

  4. পাইথনে লিংকড লিস্ট থেকে নির্দিষ্ট মানযুক্ত নোডগুলো মুছে ফেলার প্রোগ্রাম