按字母顺序对Java中的链表进行排序

时间:2013-11-12 23:22:31

标签: java sorting linked-list

我花了3个小时搜索并尝试自己制作算法。我无法弄清楚,有人能给我一个按字母顺序对链接列表进行排序的算法吗?

这是我在放弃搜索之前尝试的最后一件事,并决定在这里问一下

class link
{
public void insertNewFirstNode(String value)
{
    StringNode newNode = new StringNode(value, head);
    head = newNode;
    if(tail==null)
    {
        tail=head;
    }
}

public link sort(link L)
{
   link sorted = new link(); 
   StringNode currentNode = head; 
   while (currentNode != null) 
   {
       int data=0;

       if((currentNode.getLink() != null))
       {
       data=currentNode.getData().compareTo(currentNode.getLink().getData());
                if(data==1)
                {
                    sorted.insertNewFirstNode(currentNode.getData());
                }            
                currentNode = currentNode.getLink();  

       }
       else if((currentNode != null))
       {                      

           currentNode = currentNode.getLink();  
       }
    }
   sorted.reverse();
   return sorted;
 }
//Other functions
}

1 个答案:

答案 0 :(得分:1)

LinkedList进行排序是O(n 2 * log(n)),因为迭代列表找到一个位置需要O(n)时间并且O(n * log(n))对它进行排序。因此,最好的做法是将列表转换为数组,对数组进行排序,然后遍历数组并将列表中的节点设置为正确的顺序,即O(n + n * log(n) ))。

这正是Collections.sort()所做的(使用合并排序)。您需要做的只是覆盖.compareTo(),以便根据字母顺序排序并StringNode实施Comparable<StringNode>

或者,您可以执行以下操作:

Collections.sort(myList, new Comparator<StringNode>() {
    public int compare(StringNode node1, StringNode node2) {
          return node1.getData().compareTo(node2.getData());
    }
});

NB:
您的myList课程必须实施List,或者扩展一些内容。