Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ملخص - بناء Linked List

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 24 من 107.

challenge icon

التحدي

سهل

لنقم ببناء قائمة مرتبطة (linked list) من الصفر! ستقوم بإنشاء هيكل بيانات حيث يشير كل عقدة (node) إلى العقدة التالية، مما يشكل سلسلة من القيم المتصلة في الذاكرة.

ستقوم بتنظيم الكود الخاص بك عبر ملفين:

  • linkedlist.go: قم بتعريف هيكل Node يحتوي على حقول Value (من نوع int) و Next (من نوع *Node). قم بإنشاء هيكل LinkedList يحمل مؤشراً إلى عقدة Head. قم بتنفيذ هذه الدوال (methods) على *LinkedList:
    • Append - يضيف عقدة جديدة بالقيمة المعطاة إلى نهاية القائمة
    • Prepend - يضيف عقدة جديدة بالقيمة المعطاة إلى بداية القائمة
    • Print - يمر عبر القائمة ويطبع جميع القيم مفصولة بـ -> ، وينتهي بـ nil
  • main.go: يقرأ القيم من المدخلات، ويبني قائمة مرتبطة عن طريق إضافة العقد باستخدام append و prepend، ثم يطبع هيكل القائمة النهائي.

سيتم توفير المدخلات التالية:

  • السطر 1: القيمة الأولى للإضافة باستخدام append
  • السطر 2: القيمة الثانية للإضافة باستخدام append
  • السطر 3: القيمة للإضافة باستخدام prepend

يجب أن تقوم دالة Print الخاصة بك بإخراج القائمة بهذا التنسيق:

[value1] -> [value2] -> [value3] -> nil

على سبيل المثال، إذا كانت المدخلات 10، 20، و 5، يجب أن يكون مخرجك:

5 -> 10 -> 20 -> nil

تحتاج دالة Append إلى المرور حتى نهاية القائمة (حيث يكون Next هو nil) قبل إضافة العقدة الجديدة. يجب أن تقوم دالة Prepend بإنشاء عقدة جديدة، وتوجيه Next الخاص بها إلى الرأس (head) الحالي، ثم تحديث الرأس ليصبح العقدة الجديدة. تذكر أن القائمة الفارغة يكون رأسها nil، لذا تعامل مع هذه الحالة في دالة Append الخاصة بك.

جرّب بنفسك

package main

import "fmt"

func main() {
	// قراءة قيم المدخلات
	var val1, val2, val3 int
	fmt.Scanln(&val1)
	fmt.Scanln(&val2)
	fmt.Scanln(&val3)

	// إنشاء قائمة مرتبطة جديدة
	list := &LinkedList{}

	// TODO: استخدم Append لإضافة val1 و val2 إلى القائمة

	// TODO: استخدم Prepend لإضافة val3 إلى بداية القائمة

	// TODO: طباعة هيكل القائمة النهائي
}

جميع دروس Object Oriented Programming