|
| 1 | +import { rotateListRight } from '../RotateListRight' |
| 2 | +import { Node } from '../SinglyLinkedList' |
| 3 | + |
| 4 | +describe('Rotate list by k steps', () => { |
| 5 | + it('should shift every node by k steps towards right, shifts few tail nodes towards the start and change head of the list', () => { |
| 6 | + // Case 0: when head is null |
| 7 | + let headNode = rotateListRight(null, 0) |
| 8 | + expect(headNode).toEqual(null) |
| 9 | + |
| 10 | + // Creating list |
| 11 | + headNode = new Node(10) |
| 12 | + headNode.next = new Node(20) |
| 13 | + headNode.next.next = new Node(30) |
| 14 | + headNode.next.next.next = new Node(40) |
| 15 | + headNode.next.next.next.next = new Node(50) |
| 16 | + |
| 17 | + // Case 1: when k = 0 => List should be unaffected |
| 18 | + headNode = rotateListRight(headNode, 0) |
| 19 | + expect([headNode.data, headNode.next.data, headNode.next.next.data, headNode.next.next.next.data, headNode.next.next.next.next.data]).toEqual([10, 20, 30, 40, 50]) |
| 20 | + |
| 21 | + // Case 2: Rotate right by 2 steps |
| 22 | + headNode = rotateListRight(headNode, 2) |
| 23 | + expect([headNode.data, headNode.next.data, headNode.next.next.data, headNode.next.next.next.data, headNode.next.next.next.next.data]).toEqual([40, 50, 10, 20, 30]) |
| 24 | + |
| 25 | + // Case 3: Rotate right by 12 steps |
| 26 | + headNode = rotateListRight(headNode, 12) |
| 27 | + expect([headNode.data, headNode.next.data, headNode.next.next.data, headNode.next.next.next.data, headNode.next.next.next.next.data]).toEqual([20, 30, 40, 50, 10]) |
| 28 | + |
| 29 | + // Case 4: when k = length of the list = 5 => List should be unaffected |
| 30 | + headNode = rotateListRight(headNode, 5) |
| 31 | + expect([headNode.data, headNode.next.data, headNode.next.next.data, headNode.next.next.next.data, headNode.next.next.next.next.data]).toEqual([20, 30, 40, 50, 10]) |
| 32 | + }) |
| 33 | +}) |
0 commit comments