Условие задачи: дан связный список (linked list), поменять порядок элементов на противоположный. Примеры: Вход: 1->2->3->4->5, Выход: 5->4->3->2->1 Вход: 1, Выход: 1 Решение : class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null; // предыдущий узел ListNode curr = head; // текущий узел while(curr != null) { // пока не достигнем конца списка ListNode nextTemp = curr.next; // сохраняем ссылку на следующий узел curr.next = prev; // меняем ссылку у текущего узла на предыдущий узел prev = curr; // перемещаем указатель на предыдущий узел на текущий узел curr = nextTemp; // перемещаем указатель на текущий узел на следующий узел }
return prev; // возвращаем новую голову списка (бывший последний элемент) }
} Идея алгоритма заключается в итеративном переборе элементов связного списка с помощью указателей. В начале мы устанавливаем указатель на предыдущий узел равным nul