解题思路:
1.递归法:
比如说我的链表是1 ->2->3->4->5->null;
- 首先递归结束条件,找到最后一个元素:head.next==null;
- 添加递归调用:reverseList(head.next);
- 在递归调用之前的代码,都是在"递"的过程,其实就是每次都会在执行;
- 最后找到最后一个元素,就会开始"回溯":
- 比如说我到了"5"的位置,当前函数就会return "5"节点,到达"4"的函数体中;
- 开始执行4的函数体,要注意"4"函数的中的head表示的是"4"
- 在"4"函数中会执行:
head.next.next = head;(head.next表示5,表示5的下一个元素指向4)
head.next = null;(因为原链表是4->5->null,所以需要让4 的指向断开)
javapublic ListNode reverseList(ListNode head) { /** 递归算法: 1. 首先是判断链表是否为null,是直接返回; 判断是否只有一个元素,是 直接返回; 2. 递归调用找到最后一个元素, 比如说:1,2,3,4,5 第1层回溯:直到5时,因为head.next =null;方法执行结束返回5; 2层回溯:4的方法体中,head=4,temp=5; 原链表是4->5->null; 然后执行head.next.next =head;表示5的下一个元素指向4; 但是原本中会有4->5,避免循环,所以head.next=null; 然后就是"归",从到前一次执行: 当前节点 */ if(head == null || head.next==null){ return head; } ListNode temp = reverseList(head.next); head.next.next = head; head.next = null; return temp; }
2.迭代法: