[英]How do I reorder a doubly linked list to match the order of an array with the same elements?
我正在尝试根据更新顺序中具有相同元素的数组来更新我的双向链表的顺序。
例如,如果我有:
cat->dog->rabbit->panda
我想重新排序以获得数组的顺序:
String[] pets = {"dog", "rabbit", "panda", "cat"};
对于上下文:我是 Java 和编程的新手,所以不知道该怎么做。 本质上,我正在做的是我打乱了座位安排的元素,而双向链表是这些学生的非打乱版本。 我只想更新双向链表以匹配新洗牌版本的顺序。 我想要一个可以这样做的函数。
我有访问双向链表的最后一个和第一个元素的方法,以及从一个元素向左或向右移动的能力。 我想用基本知识来做到这一点,而不是使用地图和其他东西。 对不起,如果这听起来很麻烦,我只是想了解发生了什么!
如果您的链表类与标准LinkedList
具有相同的操作,您可以创建一个宠物映射到它们在数组中的索引:
Map<String, Integer> arrayIndices =
IntStream.range(0, pets.length)
.boxed()
.collect(Collectors.toMap(i -> pets[i], i -> i));
然后使用按数组索引排序的自定义比较器对列表进行排序:
linkedList.sort(Comparator.comparing(arrayIndices::get));
我将声明一个具有预期顺序的数组,而不是创建一个 mam 然后进行比较:
String[] order = {"cat","dog","rabbit","panda"};
然后我会跟踪一个排序算法,这是一个例子(非常简单的一个):
for (int i=0; i < pets.length(); i++){
for (int k=0, k < order.length(); k++){
if (pets[i] == order[k]){
if (i != k){
String store = pets[k];
pets[k] = pets[i];
pets[i] = store;
}else{
// Proper position
}
}
}
}
这比 markovv 回答的代码花费的时间更长; 但是,您不必潜入地图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.