שלום,
ברצוננו לערער על ההערה שקיבלנו בחלק היבש בשאלה הראשונה:
נשים לב שהפונקציה היחידה שמשתמשת בפונקציה copyList (בה נכתבה ההערה) היא הפונקציה mergeSortedLists.
אם נבחן את הפונקציה mergeSortedLists נשים לב כי אנו שולחים לפונקציה copyList מצביע לרשימה merged_out. בנוסף נשים לב כי במהלך ריצת הפונקציה mergeSortedLists איננו מקדמים את המצביע merged_out ומכאן שהוא תמיד מצביע על האיבר הראשון ברשימה merged_out.
נחזור לבחון את הפונקציה copyList, נשים לב שאם הגענו לשורה עליה נכתבה ההערה, אזי התקיים *dest_list == NULL כאשר dest_list הוא למעשה merged_out.
כלומר התקיים *merged_out == NULL ומכך נובע כי האיבר הראשון של merged_out הוא NULL, לכן אם ההקצאה לא הצליחה אין צורך למחוק את הרשימה, שכן זו ריקה מלכתחילה.
כמובן שכאשר מתקיים ש-*merged_out != NULL, כלומר אם הפונקציה איננה נכנסת ל-if, אזי במקרה של הקצאה שנכשלה אנו מוחקים את הרשימה (כפי שניתן לראות – אנו משתמשים בפונקציה addNodeOrDestroyList).
נשמח להתייחסותכם, תודה רבה.