It would be great if you could mention asymptotic running times. I briefly scanned through the code, seems like most should be what you expect, (i.e. O(1) amortized for a single rotate/insert) or O(n) for full traversels. The only exceptions are removeL and removeR, Alternatingly calling removeL and removeR looks like that is going to be expensive (i.e. linear time per operation)?
It would be great if you could mention asymptotic running times. I briefly scanned through the code, seems like most should be what you expect, (i.e. O(1) amortized for a single rotate/insert) or O(n) for full traversels. The only exceptions are removeL and removeR, Alternatingly calling removeL and removeR looks like that is going to be expensive (i.e. linear time per operation)?