这样的递归有什么问题吗?
这样的递归有什么问题吗?
private LinkNode mergeSortHelp(LinkNode head)//归并排序
{
LinkNode otherFirst;
if(head!=null)
{
if(head.next!=null)
{
otherFirst=split(head);
head=mergeSortHelp(head);
otherFirst=mergeSortHelp(otherFirst);
head=mergeNode(head,otherFirst);
}
}
return head;
}
其中spilt()和mergeNode()的定义如下:
private LinkNode split(LinkNode head)//拆分
{
LinkNode current;
if(head==null) return null;
if(head.next==null) return head;
if(head.next.next==null) return head.next;
current=head.next;
while(current!=null)
{
head=head.next;
current=current.next;
if(current!=null)
current=current.next;
}
return head;
}
private LinkNode mergeNode(LinkNode node1,LinkNode node2)//合并有序子表
{
int node1L=getNodeNextCount(node1);
int node2L=getNodeNextCount(node2);
int i=0;
int j=0;
LinkNode current=new LinkNode();
LinkNode result=current;
while((i<node1L)&&(j<node2L))
{
if(((Comparable)node1.getData()).compareTo((Comparable)node2.getData())<0){
current.next=node1;
node1=node1.next;
current=current.next;
i++;}
else{
current.next=node2;
node2=node2.next;
current=current.next;
j++;}
}
if(i==node1L)
{
while(node2!=null)
{
current.next=node2;
node2=node2.next;
current=current.next;
}
}
if(j==node2L)
{
while(node1!=null)
{
current.next=node1;
node1=node1.next;
current=current.next;
}
}
result=result.next;
return result;
}
但运行后,抛出StackOverflowError,怎么回事啊