Skip to main content

Rotate linked list clockwise by k nodes in typescript

Rotating linked list node clockwise

Ts program for Rotate linked list clockwise by k nodes. Here mentioned other language solution.

/*
  TypeScript program for 
  Rotate a list by moving each element 
  k times to the right.
  Or clockwise rotation of linked list 
*/
// Linked list node
class LinkNode
{
	public data: number;
	public next: LinkNode;
	constructor(data: number)
	{
		this.data = data;
		this.next = null;
	}
}
class SingleLL
{
	public head: LinkNode;
	public tail: LinkNode;
	constructor()
	{
		this.head = null;
		this.tail = null;
	}
	// Add new Node at end of linked list 
	public addNode(data: number)
	{
		var node = new LinkNode(data);
		if (this.head == null)
		{
			this.head = node;
		}
		else
		{
			// Append the node at last position
			this.tail.next = node;
		}
		this.tail = node;
	}
	// Display linked list element
	public display()
	{
		if (this.head == null)
		{
			console.log("\n Empty linked list");
			return;
		}
		var temp = this.head;
		// iterating linked list elements
		while (temp != null)
		{
			console.log(" " + temp.data + " →");
			// Visit to next node
			temp = temp.next;
		}
		console.log(" NULL");
	}
	// This are perform the linked list rotation
	public rotation(k: number)
	{
		// Define some auxiliary variable
		var auxiliary = this.head;
		var count = 0;
		// Count number of node in linked list
		while (auxiliary != null)
		{
			// visit to next node
			auxiliary = auxiliary.next;
			count++;
		}
		if (count <= 1)
		{
			// When have less than 2 nodes in linked list
			return;
		}
		// Get actual rotation
		count = k % count;
		if (count == 0)
		{
			// When actual linked list are not affected
			return;
		}
		auxiliary = this.head;
		// Find the rotational node
		while (count > 1)
		{
			// Visit to next node
			auxiliary = auxiliary.next;
			count--;
		}
		// Connecting the last node to first node of linked list
		this.tail.next = this.head;
		// Set new last node
		this.tail = auxiliary;
		// Set new head
		this.head = auxiliary.next;
		// Set that there is no node after of tail
		this.tail.next = null;
	}
	// Handles the request to perform rotation
	// k is indicate node rotation
	public clockwiseRotation(k: number)
	{
		if (k <= 0)
		{
			// When invalid given k
			return;
		}
		if (this.head == null)
		{
			console.log("\n Empty Linked List");
			return;
		}
		// Display given linked list
		console.log(" Before rotate ");
		console.log(" Linked List : ");
		this.display();
		console.log(" Given k : " + k);
		// Perform rotation
		this.rotation(k);
		// Display resultant linked list
		console.log(" After rotate ");
		console.log(" Linked List : ");
		this.display();
		console.log("\n");
	}
	public static main()
	{
		var sll1 = new SingleLL();
		var sll2 = new SingleLL();
		// First linked list
		// 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → NULL
		sll1.addNode(1);
		sll1.addNode(2);
		sll1.addNode(3);
		sll1.addNode(4);
		sll1.addNode(5);
		sll1.addNode(6);
		sll1.addNode(7);
		sll1.addNode(8);
		// Second linked list
		// 4 → 9 → 7 → 3 → 8 → 6 → -2 → NULL
		sll2.addNode(4);
		sll2.addNode(9);
		sll2.addNode(7);
		sll2.addNode(3);
		sll2.addNode(8);
		sll2.addNode(6);
		sll2.addNode(-2);
		// Test case
		sll1.clockwiseRotation(3);
		sll2.clockwiseRotation(18);
	}
}
SingleLL.main();
/*
 file : code.ts
 tsc --target es6 code.ts
 node code.js
 */

Output

 Before rotate
 Linked List :
 1 →
 2 →
 3 →
 4 →
 5 →
 6 →
 7 →
 8 →
 NULL
 Given k : 3
 After rotate
 Linked List :
 4 →
 5 →
 6 →
 7 →
 8 →
 1 →
 2 →
 3 →
 NULL


 Before rotate
 Linked List :
 4 →
 9 →
 7 →
 3 →
 8 →
 6 →
 -2 →
 NULL
 Given k : 18
 After rotate
 Linked List :
 8 →
 6 →
 -2 →
 4 →
 9 →
 7 →
 3 →
 NULL





Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment