我很难解决这个问题。我花了好几个小时就搞定了。
我有一个链接列表,我试图手动排序。我的节点称为CNodes。有一个启动CNode,一个尾部CNode和一个newNext CNode。
每个节点都包含一个联系人。联系人有一个名字,我试图按列表排序。
我知道有更多自动方法可以做到这一点,但我需要证明我理解如何排序(显然我现在没有)。
我试图通过迭代每个节点并将其与开始进行比较来尝试这样做,然后在符合条件的情况下更改起始实体。
此代码无效......我已经工作了两天而且我真的被卡住了。
任何具体的建议都会非常感激。
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();
}
答案 0 :(得分:0)
你能做的最好的事情就是从一个数组开始,然后让排序概念失效。你还需要弄清楚你要做什么类型的排序,你现在正在尝试进行冒泡排序。还有合并排序,快速排序等。一旦选择了所需的排序类型,就可以在阵列上执行,然后移动到节点。
以下是一些类别:
答案 1 :(得分:0)
所以你正在做的是泡泡排序。有关它的直观表示,请查看此内容(来自维基百科):http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif
所以在while循环中,当需要切换两个节点时,我们要将'next'(当前)节点存储到temp中,将尾部放在下一个节点中,然后将temp放入尾部,像一个三角形。
temp
/ ^
/ \
V \
tail -- next
我试图重写你的代码,但是对于你是否是根节点是否开始感到困惑,如果不是,那么你是什么根节点。如果是,它应该只使用一次,这就是声明你是尾节点。
祝你好运,希望我能帮忙,斯特凡诺