https://leetcode-cn.com/problems/reverse-linked-list/description/
想到有兩種方法嗅骄,第一種是從頭到尾進(jìn)行遍歷,另一種就是用遞歸
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;
? ? }
}
?其實(shí)遞歸也是一個(gè)一個(gè)檢查机蔗,直到找到最后一個(gè)元素時(shí)域携,才會(huì)彈棧蛋叼。
要將每一個(gè)的next都指向前一個(gè)堕绩,head.next.next = null;
但一直這樣的話到最后,把實(shí)際的head的下一個(gè)元素(head.next)的next指向head肺缕,但此時(shí)的head的next還是指向著head的下一個(gè)元素左医,這樣就有了錯(cuò)誤,所以應(yīng)該要把head.next指向null