给定以下输入:(注意:这不是一个链接列表,而是一个Web应用程序的一个字符串输出,我无法控制)

DAVSCAF1WD6-11 ==> MOTENVF1WD6-11
MOTENVF1WD6-11 ==> WNDVUTF1WD4-11
TPKAKSF1WD6-11 ==> KSCYMOF1WD6-11
WNDVUTF1WD3-11 ==> WGTNUTF1WD2-11
DNVRCOF1WD7-11 ==> BELTKSF1WD3-11
SNFCCAF1WD6-16 ==> DAVSCAF1WD5-16
WGTNUTF1WD2-11 ==> DTSRCOF1WD3-11
DTSRCOF1WD3-11 ==> DNVRCOF1WD6-11
BELTKSF1WD3-11 ==> TPKAKSF1WD6-11

我需要得出以下结果:
SNFCCAF1WD6-16 ==> DAVSCAF1WD5-16
DAVSCAF1WD6-11 ==> MOTENVF1WD6-11
MOTENVF1WD6-11 ==> WNDVUTF1WD4-11
WNDVUTF1WD3-11 ==> WGTNUTF1WD2-11
WGTNUTF1WD2-11 ==> DTSRCOF1WD3-11
DTSRCOF1WD3-11 ==> DNVRCOF1WD6-11
DNVRCOF1WD7-11 ==> BELTKSF1WD3-11
BELTKSF1WD3-11 ==> TPKAKSF1WD6-11
TPKAKSF1WD6-11 ==> KSCYMOF1WD6-11

这是一个列表,其中每个尾部指向行中下一个项目的头部
(例如SNFCCAF ==> DAVSCAF ==> DAVSCAF ==> MOTENVF ==> MOTENVF ==> WNDVUTF ==> etc.)在这种情况下,只有前导字母字符才有意义。
我怎样才能做到最好呢?正在使用的语言是java。

最佳答案

如果你不打算有副本,那么也许最简单的方法就是使用地图。把每一个头尾对作为键和值。然后可以使用Map.get()遍历列表,方法是使用前一个尾部作为下一个头部。
另一方面,你会陷入在列表中找到第一个项目的问题:那将是一个永远不会出现尾巴的头为此,我想您可以设置从values()中减去keySet()。假设您真的有一个链,那么结果将是包含列表中第一个元素的单例集。

10-08 14:29