我真的很难解决这个问题。我在这上面花了好几个小时,还是没弄明白。
我有一个链表,我试图手动排序。我的节点被称为CNodes。有一个起始CNode,一个尾CNode和一个新next CNode。
每个节点包含一个联系人。联系人有一个名字,我试图按这个名字对列表进行排序。
我知道有更多的自动方法可以做到这一点,但我需要证明我理解如何排序(显然我现在不知道)。
我试图通过迭代每个节点并将其与start进行比较来做到这一点,然后更改start实体,如果它符合条件。
这个代码不工作…我已经做了两天了,真的卡住了。
如有任何具体建议,我将不胜感激。
CNode nextNode=start;
while(nextNode.getNext()!=null) {
CNode newNext;
tail=nextNode;
while(tail!=null) {
if(start.getContact().getStrFirstName().compareTo(tail.getContact().getStrFirstName()) > 0) {
//We put the starting node in a temp node
newNext=start;
newNext.setNext(tail.getNext());
//We set our current node to the start
start=tail;
start.setNext(newNext);
//Set the next node of start to the original next one of the one we
//just removed from the chain
//Set current marker to the new first nodes' next entity
tail=start.getNext();
//Set the next node for the marker to the one we just removed
} else {
tail=tail.getNext();
}
}
nextNode=nextNode.getNext();
}
您能做的最好的事情是从一个数组开始,并了解排序的概念。你还需要弄清楚你要做什么类型的排序,你现在正在尝试做一个冒泡排序。还有归并排序、快速排序等。一旦选择了所需的排序类型,就可以在数组上进行排序,然后移动到节点。
以下是一些分类:
- https://github.com/BlaineOmega/MergeSort气泡排序:
- http://en.wikipedia.org/wiki/Bubble_sort快速排序
- http://en.wikipedia.org/wiki/Quicksort
这就是冒泡排序。要了解它是什么,请查看这个(来自维基百科):http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif
因此,在while循环中,当两个节点需要交换时,我们将把"下一个"(当前)节点存储到一个临时节点中,将尾节点放入下一个节点中,并将临时节点放入尾节点中,就像三角形一样。
temp
/ ^
/
V
tail -- next
我试图重写你的代码,但很困惑,如果开始是你的根节点,如果不是,什么是你的根节点。如果是,它应该只使用一次,那就是声明你是尾节点。
祝你好运,希望我有所帮助,
斯特凡诺