递归反向链接列表,为什么它是错误的

时间:2015-06-22 15:11:58

标签: recursion

问题:递归地反转单链表。

我知道如何解决这个问题,但我的一个递归方法是错误的,我无法弄清楚这个代码有什么问题。有人能弄明白吗?非常感谢!

测试用例: 输入: [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;
    }
}

1 个答案:

答案 0 :(得分:0)

它不起作用,因为在helper方法的第一遍中

ListNode prev = reverseList(head.next);

返回[3,2],然后将旧的head(1)指定为反转列表(3)的新头之后的下一个节点。因此,最终结果是[3,1]。