/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
       //新链表暂时指向一个null,不能直接和head重合,这样head往下走,newList 也往下走,
      //当head为空,newList也就指向了最后一个节点
        ListNode newList = null;
      //用来暂存newList移动到下一个节点前的值
        ListNode pre = newList;
        while(head != null){
            pre = newList;
            newList = head;
            head = head.next;
            newList.next = pre;
        }
        return newList;
    }
}

alt

总结:newList 和 head 同步向前移动,然后newList 的指针不断指向上一个值。最后一个值是head指向null,而newList指向3