206.Reverse Linked List
阿新 • • 發佈:2018-05-11
bsp play 不能 head 兩種方法 頭節點 span 尾結點 TP
題目鏈接
題目大意:翻轉單鏈表。要求用遞歸和非遞歸兩種方法。
法一:非遞歸。直接對原單鏈表進行循環操作,且不新開辟空間,用頭插法即可。代碼如下(耗時0ms):
1 public ListNode reverseList(ListNode head) { 2 if(head == null) { 3 return head; 4 } 5 ListNode res = head; 6 head = head.next; 7 res.next = null; 8 whileView Code(head != null) { 9 ListNode tmp = head; 10 //head=head.next一定要放在tmp.next=res的前面 11 //因為如果放在後面,tmp.next=res就會改變head.next的值,這樣head就不能正常指向原值,會造成死循環 12 head = head.next; 13 //下面是頭插法 14 tmp.next = res; 15 res = tmp; 16 }17 return res; 18 }
法二:遞歸。還不是很明白。代碼如下(耗時1ms):
1 public ListNode reverseList(ListNode head) { 2 if(head == null || head.next == null) { 3 return head; 4 } 5 //頭節點沒有記錄,因為頭節點會成為尾結點 6 ListNode nextHead = head.next; 7 //res保證每次return的都是頭結點View Code8 ListNode res = reverseList(head.next); 9 //return之後,開始組裝結點,其實這裏是尾插的思想 10 //依次會是5->4,4->3,3->2,2->1 11 nextHead.next = head; 12 //下面的這個操作不知是為啥。。。 13 head.next = null; 14 return res; 15 }
206.Reverse Linked List