链接列表手动排序

时间:2013-05-28 03:59:11

标签: java linked-list

我很难解决这个问题。我花了好几个小时就搞定了。

我有一个链接列表,我试图手动排序。我的节点称为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();                 
}

2 个答案:

答案 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

我试图重写你的代码,但是对于你是否是根节点是否开始感到困惑,如果不是,那么你是什么根节点。如果是,它应该只使用一次,这就是声明你是尾节点。

祝你好运,希望我能帮忙,

斯特凡诺