方式一:使用栈

栈先进后出的规则
1——>2——>3
出栈
3——>2——>1
但是1节点仍然指向着2,形成了2节点与1节点的循环,所以要使最后节点指针指向null

public ListNode ReverseList(ListNode head) {
        if (head == null) 
            return null;   
        // 栈头进尾出,列表尾节点出栈重新指定节点的指向
        Stack<ListNode> stack = new Stack<>();
        ListNode node = head;
        // 节点压栈
        while (node != null) {
            stack.push(node);
            node = node.next;
        }
        // 出栈
        // 第一个节点出栈,头节点
        node = stack.pop();
        // 出栈的节点
        ListNode preNode = node;
        // 出栈节点的后一个节点
        ListNode lastNode = null;
        // 循环出栈,且更新节点
        while (!stack.empty()) {
            lastNode = stack.pop();
            preNode.next = lastNode;
            preNode = lastNode;
            // 防止后一个节点指向前一个节点而最后造成循环
            lastNode.next = null;
        }
        return node;

    }