反转链表

一道简单的题目,下面直接贴代码,思路在注释中

import java.util.ArrayList;
import java.util.List;

/**
 * 反转链表
 * 输入一个链表,反转链表后,输出新链表的表头
 *
 * 解题思路:
 * 遍历两次,使用数组。第一次遍历所有,并按顺序全部放入数组中;
 * 第二次遍历,实现反转链表
 *
 * 要注意的地方:
 * 当head为null时,可能存在数组下标的问题,要注意以下第二次遍历的反转过程
 *
 * @author ihaokun
 * @date 2019/7/23 21:10
 */
public class ReverseLinkedList {
    public static void main(String[] args) {
        /*ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);*/
        ListNode head = null;
       head = reverse(head);
        while (head != null) {
            System.out.println(head.val);
            head = head.next;
        }
    }

    public static ListNode reverse(ListNode head) {
        List<ListNode> array = new ArrayList<>();
        while (head != null) {
            array.add(head);
            head = head.next;
        }
        if (array.size() > 0) {
            for (int i = array.size() - 1; i > 0; i--) {
                array.get(i).next = array.get(i - 1);
            }
            array.get(0).next = null;
            return array.get(array.size() - 1);
        }
        return null;
    }

    static class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
}
原文地址:https://www.cnblogs.com/ihaokun/p/11234676.html