[英]How to order string data of LinkedList
如何訂購包含字符串類型{a,c,d,b,b,d,c,a,c}
的LinkedList。 訂購后,輸出應類似於{c,c,c,a,a,d,d,b,b}
。 復雜度也應為O(1 * n)。
我假設組/名稱/項目始終為四個,並且始終為c
, a
, d
和b
。 在這種假設下很容易:創建四個列表,一個用於c
項,一個用於a
項,等等。 對於每個項目,請將其添加到適當的新列表中。 您可以使用switch
字符串。 最后,以正確的順序附加四個新列表。
這將花費O(n)時間和O(n)空間。
如果由於某種原因(我不知道可能是什么)您不想創建四個列表,只需保留對已排序列表中應插入c
, a
, d
和b
項的四個位置的四個引用。 不過,這還需要決定要指向的位置,只要還不是所有四個名稱都在列表中。
快樂的編碼。
這是用於庫存管理系統的。 有4種類型的數據名稱a,b,c和d
因此,您需要在帖子中添加該內容(如果可能,還請說明該場景)。
算法
a
, b
, c
和d
每種數據類型2個,如下所示。 Node head_c = null,tail_c = null; Node head_a = null,tail_a = null; Node head_d = null,tail_d = null; Node head_b = null,tail_b = null;
c
,請執行以下操作。 if(head_c == null){ head_c = current_node; }else{ tail_c.next = current_node; } tail_c = current_node;
對其他節點a
, d
, b
也執行與上述相同的操作。 我們在這里要做的基本上是使用鏈接列表的相同 (相同hashCode)節點分別創建4個單獨的列表c
, a
, d
和b
。
現在,您可能已經了解到,所有要做的就是為每個列表將一個人的尾巴分配給另一個列表的頭。 見下文。
main_head = head_c; tail_c.next = head_a; tail_a.next = head_d; tail_d.next = head_b; tail_b.next = null;
c
, a
, d
, b
分組。 如果您使用的是Java 8,則可以使用stream()
。 看下面的代碼:
使用以下方法對數據進行排序:
linkedList.stream().sorted().collect(Collectors.toList())
或者您可以使用以下方法反向排序集合:
linkedList.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.