簡體   English   中英

如何排序LinkedList的字符串數據

[英]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)。

我假設組/名稱/項目始終為四個,並且始終為cadb 在這種假設下很容易:創建四個列表,一個用於c項,一個用於a項,等等。 對於每個項目,請將其添加到適當的新列表中。 您可以使用switch字符串。 最后,以正確的順序附加四個新列表。

這將花費O(n)時間和O(n)空間。

如果由於某種原因(我不知道可能是什么)您不想創建四個列表,只需保留對已排序列表中應插入cadb項的四個位置的四個引用。 不過,這還需要決定要指向的位置,只要還不是所有四個名稱都在列表中。

快樂的編碼。

這是用於庫存管理系統的。 有4種類型的數據名稱a,b,c和d

因此,您需要在帖子中添加該內容(如果可能,還請說明該場景)。

算法

  • 由於您說的只有4種數據類型,因此請維護8個變量-節點abcd每種數據類型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; 
  • 對其他節點adb也執行與上述相同的操作。 我們在這里要做的基本上是使用鏈接列表的相同 (相同hashCode)節點分別創建4個單獨的列表cadb

  • 現在,您可能已經了解到,所有要做的就是為每個列表將一個人的尾巴分配給另一個列表的頭。 見下文。

 main_head = head_c; tail_c.next = head_a; tail_a.next = head_d; tail_d.next = head_b; tail_b.next = null; 
  • 因此,您得到了所需的cadb分組。
  • 時間復雜度-O(n) ,空間復雜度為O(1)

如果您使用的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM