https://leetcode-cn.com/problems/reverse-linked-list/

    1. public ListNode reverseList(ListNode head) {
    2. // 迭代
    3. // 想要反转,重点是将指向改变。
    4. ListNode pre = null;
    5. ListNode cur = head;
    6. // 最终,当前指向为null时,结束。
    7. // 不过,最终返回的是cur的前一指向pre
    8. while (cur != null) {
    9. // 首先要记录下cur当前的下一指向,用于将cur稍后指向这一指向
    10. // 这样才能一直往后迭代
    11. ListNode temp = cur.next;
    12. // 将当前的next指向前面一个,这就完成了反转
    13. cur.next = pre;
    14. // 但是,结束反转。要加当前cur变为pre,用于下一轮的指向
    15. pre = cur;
    16. // 同理,要将当前cur变为刚刚存储的原来的下一个指向,这样就实现了往后迭代
    17. cur = temp;
    18. }
    19. return pre;
    20. // 递龟
    21. if (head == null || head.next == null) {
    22. return head;
    23. }
    24. ListNode newHead = reverseList(head.next);
    25. // 产生倒置转化在这一步,head.next是原来的下一指向
    26. // 将它的下一指向,指向现在的节点,那是不是就完成了倒置?
    27. head.next.next = head;
    28. // 此外!我们没有操作当前的下一指向,也就是说
    29. // head.next还是指向原来的next,这就会产生环
    30. head.next = null;
    31. return newHead;
    32. }