问题:递归地反转单链表。
我知道如何解决这个问题,但我的一个递归方法是错误的,我无法弄清楚这个代码有什么问题。有人能弄明白吗?非常感谢!
测试用例: 输入: [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;
}
}
答案 0 :(得分:0)
它不起作用,因为在helper
方法的第一遍中
ListNode prev = reverseList(head.next);
返回[3,2],然后将旧的head
(1)指定为反转列表(3)的新头之后的下一个节点。因此,最终结果是[3,1]。