public class ReverseLinkedList { // 方法一:迭代 public ListNode reverseList1(ListNode head){ // 定义两个指针,指向当前访问的节点,以及上一个节点 ListNode curr = head; ListNode prev = null; // 依次迭代链表中的节点,将next指针指向prev while (curr != null){ // 临时保存当前节点的下一个节点 ListNode tempNext = curr.next; curr.next = prev; // 更新指针,当前指针变为之前的next,上一个指针变为curr prev = curr; curr = tempNext; } // prev指向的就是末尾的节点,也就是翻转之后的头节点 return prev; } // 方法二:递归 public ListNode reverseList(ListNode head){ // 基准情况 if (head == null || head.next == null) return head; // 递归调用,翻转剩余所有节点 ListNode restHead = head.next; ListNode reversedRest = reverseList(restHead); // 把当前节点接在翻转之后的链表末尾 restHead.next = head; // 当前节点就是链表末尾,直接指向null head.next = null; return reversedRest; } public static void main(String[] args) { ListNode listNode1 = new ListNode(1); ListNode listNode2 = new ListNode(2); ListNode listNode3 = new ListNode(3); ListNode listNode4 = new ListNode(4); ListNode listNode5 = new ListNode(5); listNode1.next = listNode2; listNode2.next = listNode3; listNode3.next = listNode4; listNode4.next = listNode5; listNode5.next = null; TestLinkedList.printList(listNode1); ReverseLinkedList reverseLinkedList = new ReverseLinkedList(); TestLinkedList.printList(reverseLinkedList.reverseList(listNode1)); } }