按字母顺序将新对象插入到链接列表(字符串)中而不进行排序

时间:2013-10-09 03:37:20

标签: java linked-list

我想知道这在Java中是否可行。我想按字母顺序将其插入正确的位置。 例如,LinkedList的(假设它叫做coollist)元素是:[Dusty,Gordon,Mayer,Popovic,Zechariah] 我尝试通过执行以下操作插入另一个String:

    coollist.add(d,Nyugen); //d is a a variable representing ant int which is the index

无论LinkedList中的内容是什么,我该怎样做才能使d按字母顺序插入它?你能帮助我吗? 我希望这是有道理的。

3 个答案:

答案 0 :(得分:1)

您可以遍历列表,搜索索引何时生成大于参数的字符串。然后插入该索引后面。如果这是单向链接列表,则必须跟踪上一个节点,以便更新其字段。

    Node newNode = new Node( stringToBeAdded ); //Create new node

    if ( this.head == null ){ //list is empty, just insert
      this.head = newNode; //Initialize head
    }

    else{

      Node cur = this.head; //Start at the beginning of the list
      Node prev = this.head; //just initialize the previous node to something

      //keep going until found or at end of list
      while( (stringToBeAdded < cur.data) && (cur != null) ){ 
        prev = cur;
        cur = cur.next;
      }

      prev.next = newNode;

      if ( cur != null ){ //if we did not reach the end
        newNode.next = cur; //current Node is alphabetically greater
      }
    }

答案 1 :(得分:1)

以下是在LinkedList中查找已排序索引的一种方法。

import java.util.*;

public class SortedLinkedListDemo {

public static void main (String [] args) {
    List<String> list = new LinkedList<String> ();
    list.add ("Dusty");
    list.add ("Gordon");
    list.add ("Mayer");
    list.add ("Popovic");
    list.add ("Zechariah");

    list.add (getSortedIndex ("Nyugen", list), "Nyugen");

    System.out.println ("List: "+list);
}

private static int getSortedIndex (String name, List<String> list) {
    for (int i=0; i < list.size(); i++) {
        if (name.compareTo(list.get(i)) < 0) {
            return i;
        }
    }       
    // name should be inserted at end.
    return list.size();
}

}

这将提供以下输出:

  

名单:[Dusty,Gordon,Mayer,Nyugen,Popovic,Zechariah]

答案 2 :(得分:0)

搜索链表需要O(n)。但是,由于您的数据已经过排序,因此将下一个字符串放在适当位置就可以找到合适的位置。在由数组支持的另一个数据结构中,这是通过二进制搜索完成的并且采用O(log n)。请参阅评论中的lreeder链接。当然,您可以自己查看列表并插入字符串,但这不是链接列表最适合的。