In my Java application both of the following will compile and run, and produce the desired result.
//"Rotate" the list items one place to the left.
myLinkedList.addLast(myLinkedList.removeFirst());
And a "rotation" in the opposite direction
//"Rotate" the list items one place to the right.
myLinkedList.addFirst(myLinkedList.removeLast());
Both "rotations" only require one line of code each, but I'm wondering if this is the right way to go about it? Are there any pitfalls in this approach?
Is there a better, more robust, less error-prone way of doing the same as I have above which would require more than one line of code to achieve, and if so please explain why.
Seems fine to me. If you had a truly circular buffer which was full you could just move the "start/end" index, but I think the linked list approach will work pretty well. In particular it's still O(1).
I suggest using Collections.rotate
.
I would implement it exactly as you have.
myLinkedList.addLast(myLinkedList.removeFirst());
The only way I can see this being "bad programming" is if the list is shared between threads and your method rotates an element from one end to the other without holding a lock (I am not aware of any concurrent Queue
implementation that can rotate atomically.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With