একটি লিঙ্ক করা তালিকা বিপরীত করুন (C++)

Ekati Linka Kara Talika Biparita Karuna C



কিভাবে C++ এ লিঙ্কড লিস্ট রিভার্স করবেন তা এই LinuxHint টিউটোরিয়ালে দেখানো হয়েছে। আপনি যখন একটি লিঙ্কযুক্ত তালিকাকে বিপরীত করেন, তখন লিঙ্কের পথটি বিপরীত হয় এবং মাথাটি লেজ হয়ে যায় এবং লেজটি মাথা হয়ে যায়। নোডগুলির অবস্থানগুলি অদলবদল করে, আমরা এটি দ্রুত বুঝতে পারি। এই অদলবদল, আমরা শুধু বাম থেকে ডানে বা বিপরীতে নোডের অবস্থান পরিবর্তন করি।

যোজিত তালিকা: এটি একটি লিঙ্কযুক্ত তালিকা যা আমরা বিপরীত করতে চাই।







বিপরীত লিঙ্ক তালিকার পরে: উপরের লিঙ্ক করা তালিকাটি বিপরীত করার পরে নীচের ফলাফল হবে।





উপরের উদাহরণ ডায়াগ্রামে, আমরা দেখতে পাচ্ছি যে হেড নোড এবং টেইল নোড তাদের অবস্থান পরিবর্তন করে যখন আমরা লিঙ্ক করা তালিকাটি বিপরীত করি। হেড নোড, যা এখন একটি টেল নোড, নাল নোডকে নির্দেশ করে কারণ এটি এখন একটি টেল নোড।





অ্যালগরিদম ধাপ

  1. আমরা একটি প্রধান পদ্ধতি তৈরি করি এবং কিছু প্রয়োজনীয় ভেরিয়েবল ঘোষণা করি।
  2. তারপর, আমাদের পরবর্তী পদক্ষেপ হল একটি পদ্ধতি তৈরি করা যা একটি লিঙ্কযুক্ত তালিকা তৈরি করতে পারে। এই পদ্ধতি আমাদের একটি লিঙ্ক তালিকা তৈরি করতে সাহায্য করে.
  3. পরবর্তী ধাপ হল লিঙ্ক করা তালিকাকে বিপরীত করার জন্য একটি পদ্ধতি তৈরি করা। এই পদ্ধতিতে, আমরা পুরো লিঙ্কযুক্ত তালিকাটি পাস করি এবং এই পদ্ধতিটি লিঙ্কযুক্ত তালিকাকে বিপরীত করবে।
  4. এখন, আমাদের ফলাফলটি বিপরীত করার পরে প্রদর্শন করার জন্য আমাদের অন্য পদ্ধতির প্রয়োজন।
  5. আমরা উপরের সমস্ত পদ্ধতিগুলিকে আমাদের মূল পদ্ধতিতে একত্রিত করব।

আমরা কিছু সচিত্র ফর্ম ব্যবহার করে বিপরীত লিঙ্কযুক্ত তালিকা ব্যাখ্যা করতে যাচ্ছি যাতে বোঝা সহজ হয়। তাই উদাহরণ দিয়ে শুরু করা যাক।

নীচে একটি লিঙ্কযুক্ত তালিকা যা আমরা বিপরীত করতে চাই।



ধাপ 1 . সবুজ রঙের নোড হল একটি হেড নোড, যা স্টার্টআপের প্রথম নোডকে নির্দেশ করে।

ধাপ ২. পরবর্তী ধাপে, আমরা হেডার নোডের পাশে নাল পয়েন্টার না পাওয়া পর্যন্ত পুরো লিঙ্কযুক্ত তালিকাটি অতিক্রম করব। তার জন্য, আমরা পরবর্তী নোডটিকে একটি অস্থায়ী নাম বরাদ্দ করতে যাচ্ছি, যেমনটি নীচের চিত্রে দেখানো হয়েছে।

ধাপ 3. যেহেতু আমাদের কাছে 'অস্থায়ী' নামে একটি নতুন রেফারেন্স নোড রয়েছে যা আমাদের নাল পয়েন্টার না পাওয়া পর্যন্ত পুরো লিঙ্কযুক্ত তালিকাটি অতিক্রম করতে সহায়তা করতে পারে, তাই আমরা শিরোনাম নোডের পরবর্তী লিঙ্কটিকে নাল হিসাবে সেট করতে পারি, যা লিঙ্ক করাকে প্রভাবিত করবে না। ডায়াগ্রামে নীচে দেখানো হিসাবে তালিকা। বর্তমান নোডের পাশের নাল পয়েন্টারটিকে পূর্ববর্তী নোড বলা হয়।

ধাপ 4। এখন, আমরা অস্থায়ী নোডকে পরবর্তী নোডে এবং বর্তমান নোডটিকে আগের অস্থায়ী নোডে নিয়ে যাই। তাই এখন আমরা পরবর্তী নোডে চলে গেছি। আমরা আগের নোডটিকে নাল থেকে বর্তমান নোডের আগের নোডে পরিবর্তন করি। সুতরাং এখন অস্থায়ী নোডটি নাল পয়েন্টার পর্যন্ত সমস্ত ট্র্যাভার্সের যত্ন নেবে যাতে আমরা বর্তমান নোডের লিঙ্কটিকে পূর্ববর্তী নোডে সেট করতে পারি এবং এখন এটি পূর্ববর্তী নোডের দিকে নির্দেশ করছে, যেমনটি নীচের চিত্রে দেখানো হয়েছে।

তাই আমরা একই পদক্ষেপগুলি অনুসরণ করি এবং শেষ পর্যন্ত, আমরা একটি বিপরীত লিঙ্কযুক্ত তালিকা পাব।

ধাপ 5 .

ধাপ 6।

ধাপ 7।

ধাপ 8।

ধাপ 9।

ধাপ 10।

ধাপ 11।

ধাপ 12।

ধাপ 13।

ধাপ 14। এই ধাপে, আমাদের লিঙ্ক করা তালিকা উল্টে গেছে।

একটি লিঙ্ক করা তালিকা বিপরীত করতে C++ প্রোগ্রাম

# অন্তর্ভুক্ত করুন
ব্যবহার নামস্থান std ;

// নোড তৈরি করার পদ্ধতি
গঠন নোড {
int মান ;
নোড * nextNodePtr ;
} * nodeObject ;

অকার্যকর লিঙ্কডলিস্ট তৈরি করুন ( int n ) ;
অকার্যকর বিপরীত লিঙ্ক তালিকা ( নোড ** nodeObject ) ;
অকার্যকর প্রদর্শন ( ) ;

int প্রধান ( ) {
int n, মান, আইটেম ;
cout << 'আপনি কতটি নোড তৈরি করতে চান =>:' ;
খাওয়া >> n ;
লিঙ্কডলিস্ট তৈরি করুন ( n ) ;
cout << ' \n লিঙ্ক তালিকায় তথ্য: \n ' ;
প্রদর্শন ( ) ;
cout << ' \n লিঙ্ক করা তালিকা বিপরীত পরে \n ' ;
বিপরীত লিঙ্ক তালিকা ( এবং nodeObject ) ;
প্রদর্শন ( ) ;
ফিরে 0 ;
}
// এই পদ্ধতিটি লিঙ্কযুক্ত তালিকা তৈরি করবে
অকার্যকর লিঙ্কডলিস্ট তৈরি করুন ( int n ) {
গঠন নোড * ফ্রন্ট নোড, * tempNode ;
int মান, i ;

nodeObject = ( গঠন নোড * ) malloc ( আকার ( গঠন নোড ) ) ;
যদি ( nodeObject == শূন্য )
cout << 'স্মৃতি নির্ধারণের জন্য যথেষ্ট নয়' ;
অন্য {
cout << 'অনুগ্রহ করে নোড 1 এর তথ্য লিখুন (শুধুমাত্র সংখ্যা):' ;
খাওয়া >> মান ;
nodeObject - > মান = মান ;
nodeObject - > nextNodePtr = শূন্য ;
tempNode = nodeObject ;

জন্য ( i = দুই ; i <= n ; i ++ ) {
ফ্রন্ট নোড = ( গঠন নোড * ) malloc ( আকার ( গঠন নোড ) ) ;

// যখন লিঙ্ক করা তালিকায় কোন নোড নেই
যদি ( ফ্রন্ট নোড == শূন্য ) {
cout << 'মেমরি বরাদ্দ করা যাবে না' ;
বিরতি ;
}
অন্য {
cout << 'অনুগ্রহ করে নোডের তথ্য লিখুন' << i << ':' ;
খাওয়া >> মান ;
ফ্রন্ট নোড - > মান = মান ;
ফ্রন্ট নোড - > nextNodePtr = শূন্য ;
tempNode - > nextNodePtr = ফ্রন্ট নোড ;
tempNode = tempNode - > nextNodePtr ;
}
}
}
}

অকার্যকর বিপরীত লিঙ্ক তালিকা ( নোড ** nodeObject ) {
গঠন নোড * tempNode = শূন্য ;
গঠন নোড * আগের নোড = শূন্য ;
গঠন নোড * বর্তমান নোড = ( * nodeObject ) ;
যখন ( বর্তমান নোড ! = শূন্য ) {
tempNode = বর্তমান নোড - > nextNodePtr ;
বর্তমান নোড - > nextNodePtr = আগের নোড ;
আগের নোড = বর্তমান নোড ;
বর্তমান নোড = tempNode ;
}
( * nodeObject ) = আগের নোড ;
}
অকার্যকর প্রদর্শন ( ) {
গঠন নোড * tempNode ;
যদি ( nodeObject == শূন্য ) {
cout << 'লিঙ্কডলিস্ট খালি' ;
}
অন্য {
tempNode = nodeObject ;
যখন ( tempNode ! = শূন্য )
{
cout << tempNode - > মান << ' \t ' ;
tempNode = tempNode - > nextNodePtr ;
}
}
cout << endl ;
}

আউটপুট

আপনি কয়টি নোড তৈরি করতে চান =>: 6
অনুগ্রহ করে নোড 1 এর তথ্য লিখুন (শুধুমাত্র সংখ্যা): 101
অনুগ্রহ করে নোড 2:95 এর তথ্য লিখুন
অনুগ্রহ করে নোড 3:61 এর তথ্য লিখুন
অনুগ্রহ করে নোড 4: 19 এর তথ্য লিখুন
অনুগ্রহ করে নোড 5:12 এর তথ্য লিখুন
অনুগ্রহ করে নোড 6:11 এর তথ্য লিখুন

লিঙ্ক তালিকায় তথ্য:
101 95 61 19 12 11

লিঙ্ক করা তালিকা বিপরীত পরে
11 12 19 61 95 101

উপসংহার

এই LinuxHint নিবন্ধটি পর্যালোচনা করেছে কিভাবে C++ এ একটি লিঙ্ক করা তালিকাকে বিপরীত করা যায়। লিঙ্ক করা তালিকাকে বিপরীত করার জন্য কিছু অন্যান্য পদ্ধতি রয়েছে, তবে এটি একটি লিঙ্ক করা তালিকাকে বিপরীত করার একটি খুব সাধারণ পদ্ধতি। আপনি কীভাবে আপনার সমস্যার সমাধান করতে চান তা সিদ্ধান্ত নেওয়া আপনার উপর নির্ভর করে, তবে সাধারণত বিপরীত লিঙ্কযুক্ত তালিকা ফাংশনটি পয়েন্টার অদলবদল সহ একটি সাধারণ লুপ হওয়া উচিত।