在我的Java应用程序中,以下两个内容都将编译并运行,并生成所需的结果。
//"Rotate" the list items one place to the left.
myLinkedList.addLast(myLinkedList.removeFirst());
反方向的“旋转”
//"Rotate" the list items one place to the right.
myLinkedList.addFirst(myLinkedList.removeLast());
两个“旋转”每个只需要一行代码,但我想知道这是否是正确的方法呢?这种方法有什么缺陷吗?
是否有一种更好,更强大,更容易出错的方法,就像我上面那样需要多行代码才能实现,如果有,请解释原因。
答案 0 :(得分:4)
对我来说似乎很好。如果你有一个真正的循环缓冲区 full 你可以只移动“开始/结束”索引,但我认为链表方法可以很好地工作。特别是它仍然是O(1)。
答案 1 :(得分:2)
我建议使用Collections.rotate
。
答案 2 :(得分:1)
我会像你一样完全实现它。
myLinkedList.addLast(myLinkedList.removeFirst());
我唯一可以看到这是“糟糕编程”的方法是,如果列表在线程之间共享,并且您的方法将元素从一端旋转到另一端而不保持锁定(我不知道任何并发{{1可以原子方式旋转的实现。)