 דערקלערן דעם פּראָצעס פֿאַר ריווערסינג אַ לינגקט רשימה אין Java.
א לינגקט רשימה איז אַ לינעאַר זאַמלונג פון דאַטן עלעמענטן אָדער נאָודז, ווו יעדער נאָדע ווייזט צו דער ווייַטער נאָדע אין דער רשימה. ריווערסינג אַ לינגקט רשימה מיטל ריווערסינג די סדר פון די נאָודז, ווו דער ערשטער נאָדע ווערט די לעצטע און די לעצטע נאָדע ווערט דער ערשטער. עס זענען עטלעכע וועגן צו פאַרקערט אַ לינגקט רשימה אין Java, אַרייַנגערעכנט ניצן אַ יטעראַטיווע צוגאַנג אָדער אַ רעקורסיווע צוגאַנג. דאָ איז אַ ביישפּיל פון ווי צו פאַרקערט אַ איין-לינגקט רשימה מיט אַן יטעראַטיוו צוגאַנג: ``` java public void reverseList (Node head) { Node prev = null; // יניטיאַליזירן אַ פריערדיקן נאָדע טייַטל צו נאַל Node curr = head; // אָנהייב פון די קאָפּ פון דער רשימה בשעת (curr != null) { Node next = curr.next; // היט דעם ווייַטער נאָדע אין אַ צייַטווייַליק בייַטעוודיק curr.next = prev; // פאַרקערט די לינק, שטעלן די ווייַטער טייַטל פון דעם קראַנט נאָדע צו די פריערדיקע נאָדע prev = curr; // מאַך די פריערדיקע נאָדע טייַטל צו די קראַנט נאָדע curr = next; // מאַך צו די ווייַטער נאָדע אין דער רשימה } // צום סוף, דערהייַנטיקן די קאָפּ פון דער רשימה צו די נייַ קאָפּ קאָפּ = prev; } ``` דער צוגאַנג ניצט אַן יטעראַטיוו בשעת שלייף צו דורכגיין די רשימה און פאַרקערט די פֿאַרבינדונגען צווישן די נאָודז. מיר אָנהייבן פֿון די קאָפּ פון דער רשימה און נוצן אַ צייַטווייַליק בייַטעוודיק צו ראַטעווען די ווייַטער נאָדע אין דער רשימה. דערנאָך מיר שטעלן די ווייַטער טייַטל פון דעם קראַנט נאָדע צו פונט צו די פריערדיקע נאָדע אַנשטאָט פון די ווייַטער נאָדע. מיר טאָן דאָס דורך אַפּדייטינג די פריערדיקע נאָדע טייַטל צו דעם קראַנט נאָדע און מאַך צו די ווייַטער נאָדע אין דער רשימה ביז די גאנצע רשימה איז ריווערסט. אַן אַלטערנאַטיווע צוגאַנג איז צו טאָן דאָס רעקורסיוולי: ``` Java public Node reverseList (Node head) { // באַזע פאַל: אויב דער קאָפּ איז נאַל אָדער עס איז בלויז איין נאָדע אין דער רשימה, צוריקקומען קאָפּ אויב (head == null | | head.next == null) { צוריקקומען קאָפּ; } // רעקורסיוועלי פאַרקערט די רעשט פון דער רשימה Node newHead = reverseList(head.next); // פאַרקערט די קראַנט נאָדע head.next.next = קאָפּ; head.next = נול; // צוריקקומען די נייַ קאָפּ פון די ריווערסט רשימה צוריקקומען newHead; } ``` אין די רעקורסיווע צוגאַנג, מיר נוצן די זעלבע לאָגיק צו פאַרקערט די פֿאַרבינדונגען צווישן די נאָודז, אָבער מיר טאָן דאָס רעקורסיוולי דורך רופן די 'ריווערסאַליסט' פֿונקציע אויף די רעשט פון דער רשימה ביז מיר דערגרייכן דעם סוף פון דער רשימה. דעמאָלט מיר פאַרקערט