我使用mid_element()函数返回中间节点的地址,并使用Merge()函数合并两个排序的链接列表。这两个函数都工作正常。但是为了以防万一,我附加了代码。我经历了合并排序算法,该算法将链表分为两部分,一个包含第一个节点直到中间节点,另一个包含从中间1到结束的节点。当然,中间节点的下一个指针设置为 null。然后,我们在两半上递归地调用合并排序,最后将两者合并。我做了同样的事情,但我最终遇到了堆栈溢出错误。请帮忙。中间元件功能:
Node *mid_element(Node *head)
{
if(head==NULL || head->next==NULL)
return head;
Node *slow=head,*fast=head->next;
while(fast!=NULL)
{
if(fast->next==NULL)
{
slow=slow->next;
break;
}
else
{
fast=fast->next->next;
slow=slow->next;
}
}
return slow;
}
合并功能:
Node *Merge(Node *h1,Node *h2)
{
Node *h=h1->data<h2->data?h1:h2,*t=h;
h1=h1->next;
while(h1!=NULL && h2!=NULL)
{
if(h1->data<h2->data)
{
t->next=h1;
t=t->next;
h1=h1->next;
}
else
{
t->next=h2;
t=t->next;
h2=h2->next;
}
}
if(h1!=NULL)
t->next=h1;
if(h2!=NULL)
t->next=h2;
return h;
}
合并排序功能:
Node *MergeSort(Node *head)
{
if(head==NULL || head->next==NULL)
return head;
else
{
Node *mid=mid_element(head);
Node *temp=mid->next;
mid->next=NULL;
Node *res1=MergeSort(head);
Node *res2=MergeSort(temp);
Node *res=Merge(res1,res2);
return res;
}
}
节点的定义:
class Node
{
public:
int data;
Node *next;
Node(int data)
{
this->data=data;
next=NULL;
}
};
我正在使用一个函数来获取输入。用户输入空格分隔的数字列表,其中-1表示列表结束。输入功能:
Node *takeInput()
{
int data;
Node *head=NULL,*temp=NULL,*curr=NULL;
do{
cin >> data;
if(data!=-1)
{
temp=new Node(data);
if(head==NULL)
{
head=curr=temp;
}
else
{
curr->next=temp;
curr=curr->next;
}
}
}while (data!=-1);
return head;
}
关于列表的大小,我刚刚检查了只有5-6个元素的列表,它崩溃了。
Merge()
中的此行取消引用可能为空的指针。
Node *h=h1->data<h2->data?h1:h2,*t=h;
它可能为空,因为mid_element()
包含此行
if(head==NULL || head->next==NULL)
return head;
…它可以返回一个next
元素为null的指针,并且MergeSort()
接受该返回值,获取可能为null的next
元素,并将其传递给Merge()
。
底线:在取消引用指针之前,需要进行更多的空检查。
问题内容: 下面的代码在执行时会产生堆栈溢出错误。但是,如果删除其中一个 它运行时没有堆栈溢出错误。如果我有以上两行,而类中只有其中一行,则没有错误,怎么会出现堆栈溢出错误呢? 问题答案: 两者都需要生成一个。当包含此行时: 首次访问该类时,将创建的实例。 不包括此行: 一切都很好。但是这条线很关键。每次创建的实例时,它都会尝试初始化其成员变量-另一个对象。然后, 该 实例将 其 初始化为另一个对
我一直在尝试使用Gson将EMF(Eclipse建模框架)模型对象序列化到Json。然而,我遇到了堆栈溢出错误,当类的包含属性设置为true时,这种错误似乎会发生。他们在EMF模型上使用GSON有任何已知的限制吗? 下面链接的是我尝试序列化的(相当简单的)EMF 模型。请注意,如果我将 Chip 中“子块”的包含属性设为 false(在这种情况下,JSON 会正确生成),则不会发生错误: 我的EM
我有一个执行快速排序的应用程序。在我开始给它一些更大的数字(我第一次得到它是10000000)之前,它工作得很好。我知道是由递归引起的,但我不明白为什么我的应用程序会因此而崩溃。如有任何建议,将不胜感激。这是我的密码:
问题内容: 我目前正在用Java编写一种快速排序算法,以对整数的随机数组进行排序,然后使用System.nanoTime()对它们进行计时。这些数组的大小是10的幂,从10 ^ 3到10 ^ 7结束。此外,随机列表具有不同的属性。我正在对纯随机列表进行排序,具有一些相同值的列表(fewUnique),反向排序的列表,已排序的列表和几乎已排序的列表。 排序有效。它对数组进行递归快速排序,直到需要对数
问题内容: 我的第一段代码是我的项目对象文件;第二个是主班。在运行代码没有任何问题之前,但是在添加读写文件之后,我的代码开始收到堆栈流错误。只是正在调用错误的代码段。 我的主班: 如何找到导致堆栈溢出的地方? 问题答案: 创建: 并创造 因此,在初始化时,您将不断创建这些对象 有一个类似的Baeldung示例,用于获取StackOverflowError 由于ClassOne的构造函数实例化了Cl