方法一:递归
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//初始化curr和prev双指针,与双指针法的初始化方式一致
ListNode curr = head;
ListNode prev = null;
//观察递归反转链表的过程,可以得出只需要两个参数的结论,因此将prev和curr作为参数
return reverse(prev,curr);
}
public ListNode reverse(ListNode prev,ListNode curr){
//递归的终止条件
if(curr == null){
return prev;
}
//定义temp结点指示curr的下一个结点,方便curr的移动
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;z
//递归反转
return reverse(prev,curr);
}
}
方法二:常规方法(双指针)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode curr = head;
ListNode prev = null;
while(curr!=null){
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
}
}