问题是 - 合并两个已排序的链接列表。 详情请见https://www.hackerrank.com/challenges/merge-two-sorted-linked-lists 当我在网站上提交此内容时,它显示“由于超时而终止”。请告诉我代码有什么问题,以及如何修复它。
Node MergeLists(Node headA, Node headB) {
// This is a "method-only" submission.
// You only need to complete this method
if(headA==null){
return headB;
}else if(headB==null){
return headA;
}else{
Node h,t;
if(headA.data>=headB.data){
h=headB;
t=h;
h=h.next;
headB=headB.next;
}else{
h=headA;
t=h;
h=h.next;
headA=headA.next;
}
while(headA!=null && headB!=null){
if(headA.data>=headB.data){
h.next=headB;
h=h.next;
headB=headB.next;
}else{
h=headA;
h=h.next;
headA=headA.next;
}
}
if(headB==null){
h=headA;
}
return t;
}
}
答案 0 :(得分:0)
代码似乎没有正确合并两个列表,laune对大多数错误进行了评论,而且while()循环中else后面的代码需要修复(它应该遵循与如果在while()循环中)。超时可能不是因为你的代码需要太长时间,而是因为对返回的合并列表的hackerrank post merge检查被卡在一个循环中或者是一个错误的引用之后。
尝试创建一个调用MergeLists函数的测试程序,以便对其进行调试。
为了解决Java没有指针指针的限制,您可以使用虚拟节点简化代码:
Node t = new Node;
Node h = t;
// ... h.next = ... merge the lists while advancing h
return t.next;