如何高效比较两个循环链表(环形列表)并判断它们是否等价?
判断两个环形List是否等价的高效方法
循环/环形(cycle/ring)是一种可表示为List的数据结构,其尾部与头部相连。
旋转List不会改变其含义,因为循环可以从任意元素开始读取。
只要元素序列保持不变,包含n个元素的循环可以有n种不同的写法,因为恰好存在n种可能的旋转方式。
例如,以下List均表示同一个环形结构:
[0, 1, 2, 3] [1, 2, 3, 0] [2, 3, 0, 1] [3, 0, 1, 2]
我需要找到一种高效的方法来判断给定的两个循环是否等价——它们可能是同一结构但以不同旋转形式呈现。
我已经考虑了一种“朴素”方法:
- 通过
Set检查两个列表的元素组成是否一致。 - 如果元素组成相同,则按以下方式检查元素序列:
- 遍历
list2,找到与list1首个位置相同的元素; - 逐个元素检查
list2是否为list1的旋转版本,需使用取模函数让list2可从索引0重新开始遍历。
- 遍历
希望Java工具类中已有现成的更高效方案来实现我的需求。
内容的提问来源于stack exchange,提问作者Zartof
相关产品推荐
相关产品推荐

