2013-10-09 51 views
0

我想知道這在Java中是否可行。我想按字母順序將它插入正確的位置。 例如是LinkedList的的(比方說,這就是所謂的coollist)要素是:塵土飛揚,戈登,邁耶,波波維奇,撒迦利亞] ,我嘗試做插入另一個字符串:按字母順序將新對象插入到字符串(字符串)中,無需排序

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

我能做些什麼使d按照字母順序插入它的值,而不管LinkedList中有什麼值?你們能幫我嗎? 我希望這是有道理的。

+2

鏈表不會做這個,但是PriorityQueue會。請參閱http://stackoverflow.com/questions/416266/sorted-collection-in-java – lreeder

回答

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(); 
} 

}

這會給下面的輸出:

列表:塵土飛揚,戈登,邁耶,Nyugen,波波維奇,撒迦利亞]

+0

這正是我想到的。它完美的作品。多謝兄弟。 –

0

搜索鏈接列表需要O(n)。但是由於你的數據是排序的,把下一個字符串放在適當的位置就是找到正確的位置。在由數組支持的另一個數據結構中,這是通過二進制搜索完成的,並採用O(log n)。請參閱評論中的貨主鏈接。當然,你總是可以自己查看列表並插入字符串,但這不是鏈接列表最擅長的。

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 
     } 
    } 
相關問題