https://leetcode-cn.com/problems/reverse-linked-list/description/
想到有两种方法,第一种是从头到尾进行遍历,另一种就是用递归
1.遍历
class solution{
public ListNode reverseList(ListNode head){
ListNode prev = null;
ListNode curr = head;
while(curr != null){
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
}
}
2.递归
class solution{
public ListNode reverseList(ListNode head){
//The linked list is empty or just has one element.
if( head == null || head.next == null) return head;
ListNode temp = reverseList(head.next);
head.next.next = head;
head.next = null;
return temp;
}
}
其实递归也是一个一个检查,直到找到最后一个元素时,才会弹栈。
要将每一个的next都指向前一个,head.next.next = null;
但一直这样的话到最后,把实际的head的下一个元素(head.next)的next指向head,但此时的head的next还是指向着head的下一个元素,这样就有了错误,所以应该要把head.next指向null