1. 程式人生 > >206.Reverse Linked List

206.Reverse Linked List

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         while
(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 }
View Code

法二:遞歸。還不是很明白。代碼如下(耗時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的都是頭結點
8 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 }
View Code

206.Reverse Linked List