/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { // 双指针法 // 1. 判断是否是空链表或只有一个节点的链表 if (head==null||head.next==null) { return head; } // 2. 遍历链表,使每个节点的下一个节点指向它的前一个节点 // 因为是单向链表,所以当前节点不知道它的上一个节点是谁, // 我们需要使用一个 pre 指针来记录前一个节点 // 因为头节点之前没有节点,所以用 null 初始化 ListNode pre = null; // cur 指针记录当前节点,使用头节点初始化 ListNode cur = head; // 遍历链表必须,nextNode 指针指向下一个节点 ListNode nextNode; // 遍历到当前节点为空为止 while (cur!=null) { // 指向下一个节点 nextNode = cur.next; // 将当前节点的 next 指针指向前一个节点 cur.next = pre; // 双指针右移 pre = cur; cur = nextNode; } // 最后,pre 指针记录的就是链表的头节点(原链表的尾节点) return pre; } }