Menu
Coddy logo textTech

סיכום - בונה רשימה מקושרת

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 24 מתוך 107.

challenge icon

אתגר

קל

בואו נבנה רשימה מקושרת מאפס! תיצרו מבנה נתונים שבו כל צומת מצביע לצומת הבא, וכך נוצרת שרשרת של ערכים מחוברים בזיכרון.

תארגנו את הקוד בשני קבצים:

  • linkedlist.go: הגדירו מבנה Node עם השדות Value (int) ו-Next (*Node). צרו מבנה LinkedList שמכיל מצביע לצומת Head. ממשו את המתודות האלה עבור *LinkedList:
    • Append - מוסיפה צומת חדש עם הערך הנתון לסוף הרשימה
    • Prepend - מוסיפה צומת חדש עם הערך הנתון לתחילת הרשימה
    • Print - עוברת על הרשימה ומדפיסה את כל הערכים מופרדים באמצעות -> , ומסיימת ב-nil
  • main.go: קראו ערכים מהקלט, בנו רשימה מקושרת באמצעות הוספת צמתים לסוף ולתחילת הרשימה, ואז הדפיסו את מבנה הרשימה הסופי.

הקלטים הבאים יסופקו:

  • שורה 1: הערך הראשון להוספה לסוף הרשימה
  • שורה 2: הערך השני להוספה לסוף הרשימה
  • שורה 3: הערך להוספה לתחילת הרשימה

המתודה Print שלכם צריכה להפיק את הרשימה בפורמט הזה:

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

לדוגמה, בהינתן 10, 20 ו-5, הפלט שלכם צריך להיות:

5 -> 10 -> 20 -> nil

המתודה Append צריכה לעבור עד סוף הרשימה (שבו Next הוא nil) לפני הוספת הצומת החדש. המתודה Prepend צריכה ליצור צומת חדש, להפנות את Next שלו לראש הרשימה הנוכחי, ואז לעדכן את הראש כך שיצביע לצומת החדש. זכרו שברשימה ריקה הראש הוא 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: הדפיסו את המבנה הסופי של הרשימה
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Go אונליין