如何订购包含字符串类型{a,c,d,b,b,d,c,a,c}
的LinkedList。订购后,输出应类似于{c,c,c,a,a,d,d,b,b}
。
复杂度也应为O(1 * n)。
答案 0 :(得分:1)
我假设组/名称/项目始终为四个,并且始终为c
,a
,d
和b
。在这种假设下很容易:创建四个列表,一个用于c
项目,一个用于a
项目,等等。遍历链接列表;对于每个项目,请将其添加到适当的新列表中。您可以在字符串上使用switch
。最后,以正确的顺序附加四个新列表。
这将花费O(n)时间和O(n)空间。
如果由于某种原因(我不知道它可能是什么)您不想创建四个列表,只需在已排序列表中的四个地方保留四个引用,其中c
,{{ 1}},a
和d
项目应插入。不过,只要还不是所有四个名称都在列表中,就需要决定要指向何处。
快乐的编码。
答案 1 :(得分:1)
这是用于库存管理系统的。有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
分组。 答案 2 :(得分:0)
如果您使用的是Java 8,则可以使用stream()
。看下面的代码:
使用以下方法对数据进行排序:
linkedList.stream().sorted().collect(Collectors.toList())
或者您可以使用以下方法反向排序集合:
linkedList.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList())