所以我一直在尝试使用合并排序来对链表进行排序,我发现这个代码并试图在它上面工作,但它并没有真正起作用?在链接列表上合并排序
有什么问题呢?我不太清楚getMiddle方法,尽管我知道它应该得到列表的中间值,以便从列表本身处理2个列表
下面是代码;
public Node mergeSort(Node head) {
if (head == null || head.link == null) {
return head;
}
Node middle = getMiddle(head);
Node sHalf = middle.link;
middle.link = null;
return merge(mergeSort(head), mergeSort(sHalf));
}
public Node merge(Node a, Node b) {
Node dummyHead;
Node current;
dummyHead = new Node();
current = dummyHead;
while (a != null && b != null) {
if ((int) a.getData() <= (int) b.getData()) {
current.link = a;
a.link = a;
}
else {
current.link = b;
b.link = a;
}
current = current.link;
}
current.link = (a == null) ? b : a;
return dummyHead;
}
public Node getMiddle(Node head) {
if (head == null) {
return head;
}
Node slow, fast;
slow = fast = head;
while (fast.link != null && fast.link.link != null) {
slow = slow.link;
fast = fast.link.link;
}
return slow;
}
在main方法:
Object data;
MyLinkedList list = new MyLinkedList(); //empty list.
for (int i = 0; i < 3; i++) { //filling the list
data = console.nextInt();
list.insertAtFront(data);
}
System.out.print("Print(1): ");
list.printList();
list.mergeSort(list.getHead());
System.out.print("List after sorting: ");
list.printList();
'什么能与它的问题“你没有花足够的时间去研究错误是什么。什么不起作用,给我们一个简单的例子,并解释错误是什么。 –
我想出了mergeSort方法,它应该把一个List作为参数&不是一个节点,所以它会返回一个List。至于错误,似乎在方法调用时,没有输出。 – Scarl
所以给我们一个简单的例子,我们可以运行的地方,这不工作,你会发生什么。即编写一个失败的单元测试。 –