عكس القائمة المرتبطة (C ++)

Ks Alqaymt Almrtbtt C



يتم عرض كيفية عكس قائمة مرتبطة في C ++ في هذا البرنامج التعليمي LinuxHint. عند عكس قائمة مرتبطة ، يتم عكس مسار الارتباط ، ويصبح الرأس هو الذيل ، ويصبح الذيل هو الرأس. من خلال تبديل مواضع العقد ، يمكننا فهم ذلك بسرعة. في هذا التبادل ، نقوم فقط بتغيير مواضع العقد من اليسار إلى اليمين أو العكس.

قائمة مرتبطة: هذه قائمة مرتبطة نريد عكسها.







بعد عكس القائمة المرتبطة: سيكون ما يلي هو النتيجة بعد عكس القائمة المرتبطة أعلاه.





في المثال أعلاه ، يمكننا أن نرى أن عقدة الرأس والعقدة الخلفية يغيران مواقعهما عندما نعكس القائمة المرتبطة. تشير العقدة الرئيسية ، التي أصبحت الآن عقدة ذيل ، إلى العقدة الخالية لأنها الآن عقدة ذيل.





خطوات الخوارزمية

  1. نقوم بإنشاء طريقة رئيسية ونعلن عن بعض المتغيرات المطلوبة.
  2. بعد ذلك ، خطوتنا التالية هي إنشاء طريقة يمكنها إنشاء قائمة مرتبطة. تساعدنا هذه الطريقة في إنشاء قائمة مرتبطة.
  3. الخطوة التالية هي إنشاء طريقة لعكس القائمة المرتبطة. في هذه الطريقة ، نقوم بتمرير القائمة المرتبطة بالكامل ، وستعمل هذه الطريقة على عكس القائمة المرتبطة.
  4. الآن ، نحتاج إلى طريقة أخرى لعرض النتيجة بعد عكسها.
  5. سنجمع كل هذه الأساليب المذكورة أعلاه في طريقتنا الرئيسية.

سنقوم بشرح القائمة المرتبطة المعكوسة باستخدام بعض الأشكال التصويرية لتسهيل فهمها. فلنبدأ بالمثال.

فيما يلي قائمة مرتبطة نريد عكسها.



الخطوة 1 . العقدة ذات اللون الأخضر هي عقدة رئيسية تشير إلى العقدة الأولى في بدء التشغيل.

الخطوة 2. في الخطوة التالية ، سوف نجتاز القائمة المرتبطة بأكملها حتى لا نحصل على المؤشر الفارغ بجوار عقدة الرأس. لذلك ، سنقوم بتعيين اسم مؤقت للعقدة التالية ، كما هو موضح في الرسم البياني أدناه.

الخطوه 3. نظرًا لأن لدينا عقدة مرجعية جديدة تسمى 'مؤقتة' ، والتي يمكن أن تساعدنا في اجتياز القائمة المرتبطة بالكامل حتى لا نحصل على المؤشر الفارغ ، لذلك يمكننا تعيين الرابط التالي لعقدة الرأس على أنه فارغ ، والذي لن يؤثر على الرابط المرتبط القائمة كما هو موضح أدناه في الرسم التخطيطي. يسمى المؤشر الفارغ الموجود بجوار العقدة الحالية العقدة السابقة.

الخطوة 4. الآن ، نقوم بنقل العقدة المؤقتة إلى العقدة التالية والعقدة الحالية إلى العقدة المؤقتة السابقة. لذا انتقلنا الآن إلى العقدة التالية. نقوم أيضًا بتغيير العقدة السابقة من العقدة الفارغة إلى العقدة السابقة فقط من العقدة الحالية. لذا فإن العقدة المؤقتة ستهتم الآن بجميع عمليات العبور حتى المؤشر الفارغ حتى نتمكن من ضبط ارتباط العقدة الحالية بالعقدة السابقة ، وهي الآن تشير إلى العقدة السابقة ، كما هو موضح في الرسم البياني أدناه.

لذلك نتبع نفس الخطوات ، وأخيراً ، سنحصل على قائمة مرتبطة معكوسة.

الخطوة الخامسة .

الخطوة 6.

الخطوة 7.

الخطوة 8.

الخطوة 9.

الخطوة 10.

الخطوة 11.

الخطوة 12.

الخطوة 13.

الخطوة 14. في هذه الخطوة ، تم عكس قائمتنا المرتبطة.

برنامج C ++ لعكس قائمة مرتبطة

# تضمين
استخدام مساحة الاسم الأمراض المنقولة جنسيا ؛

// طريقة إنشاء العقدة
هيكل العقدة {
int القيمة ؛
العقدة * التالي ؛
} * nodeObject ؛

فارغ إنشاء قائمة الروابط ( int ن ) ؛
فارغ عكس القائمة ( العقدة ** nodeObject ) ؛
فارغ عرض ( ) ؛

int رئيسي ( ) {
int ن ، قيمة ، عنصر ؛
كوت << 'كم عدد العقد التي تريد إنشاءها =>:' ؛
يتناول الطعام >> ن ؛
إنشاء قائمة الروابط ( ن ) ؛
كوت << ' المعلومات في القائمة المرتبطة: ' ؛
عرض ( ) ؛
كوت << ' القائمة المرتبطة بعد عكسها ' ؛
عكس القائمة ( & nodeObject ) ؛
عرض ( ) ؛
إرجاع 0 ؛
}
// ستنشئ هذه الطريقة القائمة المرتبطة
فارغ إنشاء قائمة الروابط ( int ن ) {
هيكل العقدة * العقدة الأمامية * tempNode ؛
int قيمة ، أنا ؛

nodeObject = ( هيكل العقدة * ) مالوك ( حجم ( هيكل العقدة ) ) ؛
إذا ( nodeObject == لا شيء )
كوت << 'لا يكفي لتأكيد الذاكرة' ؛
آخر {
كوت << 'الرجاء إدخال معلومات العقدة 1 (رقم فقط):' ؛
يتناول الطعام >> القيمة ؛
nodeObject - > القيمة = القيمة ؛
nodeObject - > التالي = لا شيء ؛
tempNode = nodeObject ؛

إلى عن على ( أنا = اثنين ؛ أنا <= ن ؛ أنا ++ ) {
العقدة الأمامية = ( هيكل العقدة * ) مالوك ( حجم ( هيكل العقدة ) ) ؛

// عند عدم وجود أي عقدة في القائمة المرتبطة
إذا ( العقدة الأمامية == لا شيء ) {
كوت << 'لا يمكن تخصيص الذاكرة' ؛
فترة راحة ؛
}
آخر {
كوت << 'الرجاء إدخال معلومات العقدة' << أنا << ':' ؛
يتناول الطعام >> القيمة ؛
العقدة الأمامية - > القيمة = القيمة ؛
العقدة الأمامية - > التالي = لا شيء ؛
tempNode - > التالي = العقدة الأمامية ؛
tempNode = tempNode - > التالي ؛
}
}
}
}

فارغ عكس القائمة ( العقدة ** nodeObject ) {
هيكل العقدة * tempNode = لا شيء ؛
هيكل العقدة * العقدة السابقة = لا شيء ؛
هيكل العقدة * CurrentNode = ( * nodeObject ) ؛
في حين ( CurrentNode ! = لا شيء ) {
tempNode = CurrentNode - > التالي ؛
CurrentNode - > التالي = العقدة السابقة ؛
العقدة السابقة = CurrentNode ؛
CurrentNode = tempNode ؛
}
( * nodeObject ) = العقدة السابقة ؛
}
فارغ عرض ( ) {
هيكل العقدة * tempNode ؛
إذا ( nodeObject == لا شيء ) {
كوت << 'قائمة الروابط فارغة' ؛
}
آخر {
tempNode = nodeObject ؛
في حين ( tempNode ! = لا شيء )
{
كوت << tempNode - > القيمة << ' \ t ' ؛
tempNode = tempNode - > التالي ؛
}
}
كوت << إندل ؛
}

انتاج |

كم عدد العقد التي تريد إنشاءها =>: 6
الرجاء إدخال معلومات العقدة 1 (رقم فقط): 101
الرجاء إدخال معلومات العقدة 2:95
الرجاء إدخال معلومات العقدة 3:61
الرجاء إدخال معلومات العقدة 4:19
الرجاء إدخال معلومات العقدة 5:12
الرجاء إدخال معلومات العقدة 6:11

المعلومات في القائمة المرتبطة:
101 95 61 19 12 11

القائمة المرتبطة بعد عكسها
11 12 19 61 95101

استنتاج

استعرضت مقالة LinuxHint هذه كيفية عكس قائمة مرتبطة في C ++. هناك بعض الطرق الأخرى لعكس قائمة مرتبطة ، ولكن هذه طريقة شائعة جدًا لعكس قائمة مرتبطة. الأمر متروك لك لتقرر كيف تريد حل مشاكلك ، ولكن بشكل عام يجب أن تكون وظيفة القائمة المرتبطة العكسي عبارة عن حلقة بسيطة مع مقايضات المؤشر.