我如何对双向链表进行重新排序以匹配具有相同元素的数组的顺序?

问题描述 投票:1回答:2

我正在尝试根据具有相同顺序的相同元素的数组来更新双向链表的顺序。

例如,如果我有:

cat->dog->rabbit->panda

并且我想重新排序以具有数组的顺序:

String[] pets = {"dog", "rabbit", "panda", "cat"};

对于上下文:我是Java和编程的新手,所以不确定如何去做。本质上,我在做的是我对座位安排的元素进行了改组,而双向链表是这些学生的未改组版本。我只想更新双向链表以匹配新的改组版本的顺序。我想要一个可以做到的功能。

我有方法访问双向链表的最后一个元素和第一个元素,并且能够从一个元素向左或向右移动。我想用基础知识来做到这一点,而不使用地图和东西。抱歉,如果这听起来很麻烦,我只是想了解发生了什么!

java arrays doubly-linked-list
2个回答
1
投票

如果您的链表类具有与标准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));

0
投票

而不是创建一个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回答花费的时间更长;但是,您不必潜入地图。

© www.soinside.com 2019 - 2024. All rights reserved.