链表手动排序



我真的很难解决这个问题。我在这上面花了好几个小时,还是没弄明白。

我有一个链表,我试图手动排序。我的节点被称为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

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

祝你好运,希望我有所帮助,

斯特凡诺

相关内容

  • 没有找到相关文章

最新更新