链接列表手册按字母顺序排序

时间:2014-10-09 23:04:23

标签: java

我正在使用java中的链接列表。我们的任务是从头开始创建一个,将用户输入(字符串)按字母顺序排序。我一直在尝试很多东西,但我提出的概念似乎都没有用。任何建议/提示将不胜感激。

package linkedlist;
public class Linked {

    Node head;
    int listCount;    

    public Linked(){
        head = new Node(null);
        listCount = 0;
    }
    public void add(String data){
        Node linkedTemp = new Node(data);
        Node linkedCurrent = head;
        while (linkedCurrent.getNext() != null) {
                linkedCurrent = linkedCurrent.getNext();
                }
        linkedCurrent.setNext(linkedTemp);
        listCount++;

    }

    public void add2(String data){
        Node linkedTemp = new Node(data);
        Node linkedCurrent = new Node(get(1));

        if(listCount >= 1){ 

          while (linkedCurrent.getNext() != null){

              if(linkedCurrent.getData().compareTo(linkedTemp.getData()) <= 0){
                  linkedCurrent.setNext(linkedTemp);
                  listCount++;
                  break;
              }
              if(linkedCurrent.getData().compareTo(linkedTemp.getData()) >= 0)
                linkedCurrent = linkedCurrent.getNext();
        }
    }
    }

     public String toString() {
        Node linkedCurrent = head.getNext();
        String output = "";
        while (linkedCurrent != null) {
            output += "[" + linkedCurrent.getData().toString() + "]";
            linkedCurrent = linkedCurrent.getNext();
        }
        return output;
    }
     public String get(int index)
    {
        if (index <= 0)
            return null;

        Node linkedCurrent = head.getNext();
        for (int i = 1; i < index; i++) {
            if (linkedCurrent.getNext() == null)
                return null;

            linkedCurrent = linkedCurrent.getNext();
        }
        return linkedCurrent.getData();
    }
}

1 个答案:

答案 0 :(得分:0)

除了排序不起作用外,我认为您的代码没问题。例如,

public static void main(String[] args) {
    Linked linked = new Linked();
    linked.add("data3");
    linked.add("data2");
    linked.add("data1");
    System.out.println( linked );

    System.out.println( linked.get(1) );
    System.out.println( linked.get(2) );
    System.out.println( linked.get(3) );
    System.out.println( linked.get(4) );
}

以上测试代码给出了符合我们期望的输出。

[data3][data2][data1]
data3
data2
data1
null

但正如我告诉你的那样,事情是问题的排序部分没有解决。为了解决这个问题,我认为你应该修改代码的“添加”部分。您的add方法不考虑插入项目的顺序。

public void add(String data){
    Node linkedTemp = new Node(data);
    Node linkedCurrent = head;
    Node linkedPrev = head;
    while ( linkedCurrent != null ) {
        if ( linkedCurrent.getData() != null && linkedCurrent.getData().compareTo(data) > 0 ) {
            break;              
        }
        linkedPrev = linkedCurrent;
        linkedCurrent = linkedCurrent.getNext();
    }
    linkedTemp.setNext( linkedPrev.getNext() );
    linkedPrev.setNext(linkedTemp);
    listCount++;
}

当您的代码使用包含无意义数据的“null head”时,if语句中添加的while块会检查linkedCurrent.getData()是否为空。

add方法进行上述修改后,输出变为:

[data1][data2][data3]
data1
data2
data3
null