1. C++ / Говнокод #27001

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    Node* reverse(Node* head) 
    {
    	Node *end = head, *current = head;
    	while (end->next != nullptr) {
    		end = end->next;
    	}
    	
    	Node *initial_end = end, *temp = nullptr, *temp_2 = nullptr;
    	
    	end->next = current;
    	temp = current;
    	current = current->next;
    	temp->next = nullptr;
    	
    	while (current != initial_end) {
    		
    		temp_2 = initial_end->next;
    		initial_end->next = current;
    		temp = current;
    		current = current->next;
    		temp->next = temp_2;
    	}
    	
    	return initial_end;
    }

    Я где-то прочитал, что на собесе нужно написать переворот односвязного списка за 5 минут... Спустя 2 дня получилось это.

    Запостил: oaoaoammm, 04 Октября 2020

    Комментарии (6) RSS

    • Теперь смотрим, как это делается на "PHP":
      $list=array_reverse($list);
      Ответить
    • > за 5 минут

      Хм, за 5 минут независимо от длины списка? Во валят!
      Ответить
    • Эм, а этот код вообще что-то меняет в списке? Блин, внатуре переворачивает.
      Ответить
      • Я за два дня написал, что оно мне передрачивало список (собирало его циклично, добавляя первый элемент в конец)

        А потом за часок сидения с бумажкой и ручкой до меня это дошло, и я переписал как переписал.
        Ответить
    • Поучаствую в специальной олимпиаде:
      Node *p = nullptr;
      while (head) {
          Node *tmp = head;
          head = head->next;
          tmp->next = p;
          p = tmp;
      }
      
      return p;
      Ответить
      • Node *p = nullptr;
        while (head) {
            std::swap(head, p);
            std::swap(p->next, head);
        }
        return p;
        Ответить

    Добавить комментарий