java:超出内存限制?

时间:2018-09-21 00:52:28

标签: java memory

我在leetCode中用Java编写了一个代码,这是链接: https://leetcode.com/problems/reverse-linked-list/description/

显示“超出内存限制”,任何人都可以解释原因吗?(您可以将我的代码粘贴到上面的链接中以查看错误)

我的代码如下:

  public static class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
   }


public ListNode reverseList(ListNode head) {
    if(head ==null)
        return head;
    if(head.next ==null){
    return head;
    }
    Stack<ListNode> mStack =new Stack<>();
    while(head!=null){
        mStack.push(head);
        head = head.next;

    }
    ListNode mNode = new ListNode(0);
    ListNode result =mNode;
    while(!mStack.empty()){
       ListNode temp =  mStack.pop();;
        mNode.next = temp;
        mNode = mNode.next;

    }
    return result.next;

}

2 个答案:

答案 0 :(得分:1)

问题是,假设输入为1-> 2-> 3。然后您将返回的是 3-> 2-> 1-> 2-> 1-> 2 ..... 调用toString方法时,此循环链接列表将导致超出内存限制。 要解决此问题,只需将原始head的下一个设置为null。

答案 1 :(得分:0)

这是因为他们希望您以恒定的空间复杂度来执行此操作。一个简单的递归解决方案是:

class Solution {



public ListNode reverseList(ListNode head) {
    if (head==null){
        return head;
    }
    return reverseList(head,null);
}

public ListNode reverseList(ListNode current,ListNode prev){
    if (current.next==null){
        // we have reached the last node. This will be the new head
        current.next = prev;
        return current;
    }
    ListNode head = reverseList(current.next,current);
    current.next=prev;
    return head;

}
}