我在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;
}
答案 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;
}
}