המשימה
כתוב פעולה שמקבלת מצביע לחוליה הראשונה בשרשרת וערך x, מסירה מהשרשרת את **כל** החוליות שערכן x, ומחזירה מצביע לחוליה הראשונה של השרשרת החדשה. דוגמאות עבור x=5: 1 → 5 → 5 → 2 → 5 → null → 1 → 2 → null 5 → 5 → 5 → null → null 1 → 2 → 3 → null → 1 → 2 → 3 → null הנחיות: • **הפעולה מחזירה Node.** זו כל הנקודה: אם החוליה הראשונה עצמה צריכה להימחק, הראש משתנה — ומי שקרא לפעולה חייב לקבל את הראש החדש. • קישור מחדש נעשה עם setNext: כדי לדלג על חוליה, מקשרים את קודמתה לחוליה שאחריה. • שים לב למופעים רצופים — אחרי דילוג אסור להתקדם מיד, כי גם הבאה עשויה להיות x. המחלקה Node כבר מצורפת למשימה. [רשימה מקושרת] [רשימה מקושרת] [רשימה מקושרת]
קוד הפתיחה
using System;
class Program {
/** מסירה את כל החוליות שערכן x, ומחזירה את הראש החדש. */
static Node<int> RemoveAll(Node<int> head, int x) {
// כתוב את הפתרון כאן
return head;
}
// ── עזר, לא חלק מהמשימה ──────────────────────────────────────────
static Node<int> Build(int[] values) {
Node<int> h = null;
for (int i = values.Length - 1; i >= 0; i--)
h = new Node<int>(values[i], h);
return h;
}
static void Print(Node<int> head) {
Node<int> pos = head;
while (pos != null) {
Console.Write(pos.GetInfo() + " -> ");
pos = pos.GetNext();
}
Console.WriteLine("null");
}
static void Main() {
Node<int> a = Build(new int[]{1, 5, 5, 2, 5});
Print(a); // 1 -> 5 -> 5 -> 2 -> 5 -> null
a = RemoveAll(a, 5);
Print(a); // 1 -> 2 -> null
Node<int> b = Build(new int[]{5, 5, 5});
b = RemoveAll(b, 5);
Print(b); // null
Node<int> c = Build(new int[]{1, 2, 3});
c = RemoveAll(c, 9);
Print(c); // 1 -> 2 -> 3 -> null
Print(RemoveAll(null, 5)); // null
}
}
כדי לכתוב, להריץ ולקבל משוב — התחבר עם חשבון Google. לוקח שנייה.
המשוב נוצר על ידי AI ועשוי לטעות. אם אתה חושב שהפתרון שלך נכון —
כנראה שאתה צודק. הציון כאן הוא לתרגול בלבד ואינו מדווח לאיש.
אל תכתוב בקוד פרטים אישיים כמו שם מלא, טלפון או כתובת. הקוד נשלח לשירות
בדיקה חיצוני.