首页 > 解决方案 > 如何重新排序双向链表以匹配具有相同元素的数组的顺序?

问题描述

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

例如,如果我有:

cat->dog->rabbit->panda

我想重新排序以获得数组的顺序:

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

对于上下文:我是 Java 和一般编程的新手,所以不知道该怎么做。从本质上讲,我所做的是对座位安排的元素进行了洗牌,而双向链表是这些学生的非洗牌版本。我只想更新双向链表以匹配新洗牌版本的顺序。我想要一个可以这样做的功能。

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

标签: javaarraysdoubly-linked-list

解决方案


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

推荐阅读