注意setget方法输入
static的使用场景
自定义ListNode类
清楚链表结构next的含义。什么时候是指针,什么时候是值

public class NC78 {
/**
* 链表结构
*/
@Data
static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}

public static ListNode ReverseList(ListNode head) {

    if (head == null)
        return head;
    ListNode pre = head;// 上一结点
    ListNode cur = head.getNext();// 当前结点
    ListNode tmp;// 临时结点,用于保存当前结点的指针域(即下一结点)
    while (cur != null) {// 当前结点为null,说明位于尾结点
        tmp = cur.getNext();
        cur.setNext(pre);// 反转指针域的指向

        // 指针往下移动
        pre = cur;
        cur = tmp;
    }
    // 最后将原链表的头节点的指针域置为null,还回新链表的头结点,即原链表的尾结点
    head.setNext(null);

    return pre;

}


public static void main(String[] args) {

    ListNode node1=new ListNode(1);
    ListNode node2=new ListNode(2);
    ListNode node3=new ListNode(3);

    ListNode head=new ListNode(0);
    head.setNext(node1);
    node1.setNext(node2);
    node2.setNext(node3);
    ListNode h=head;
    System.out.println("******");
    while (null!=h){
        System.out.print(h.getVal()+" ");
        h=h.getNext();
    }
    System.out.println("\n******");
    ListNode listNode = ReverseList(head);
    while (null!=listNode){
        System.out.print(listNode.getVal()+" ");
        listNode=listNode.getNext();
    }
    System.out.println("\n******");
}

}