2015-06-22 46 views
0

問題:遞歸地反轉單向鏈表。遞歸反向鏈接列表,爲什麼它是錯的

我知道如何解決這個問題,但我的一個遞歸方法是錯誤的,我無法弄清楚這個代碼有什麼問題。任何人都可以弄清楚嗎?非常感謝!

測試用例: 輸入: [1,2,3] 輸出: [3,1] 預期: [3,2,1]

public class Solution { 
    // recursive 
    ListNode last = null; 
    public ListNode reverseList(ListNode head) { 
     if (head == null) return null; 
     helper(head); 
     return last; 
    } 
    private ListNode helper(ListNode head) { 
     // base case 
     if (head.next == null) { 
      last = head; 
      return head; 
     } 
     // general case 
     ListNode prev = reverseList(head.next); // should be ListNode prev = helper(head.next); 
     prev.next = head; 
     head.next = null; 
     return head; 
    } 
} 
+2

爲您使用的編程語言添加標籤會很有幫助。 – fvu

+0

在recusive函數中使用「全局」(最後一個)通常是一個不好的跡象。 –

+0

另一個不好的跡象是,你從'reverseList'中沒有使用的方法'helper'返回一些東西... – Renzo

回答

0

它不工作的,因爲在helper方法的第一通

ListNode prev = reverseList(head.next); 

返回[3,2],然後將新小時後分配舊head(1)是下一個節點反向列表(3)的ead。因此,最終的結果是[3,1]。

+0

非常感謝,我知道我因爲粗心大意而犯了一個錯誤。我更注重邏輯,但更少關注我的寫作。 – Junior