Related Articles
Move last element to front of a given Linked List | Set 2
• Last Updated : 07 Aug, 2019

Given a singly linked list and an integer K. The task is to append last K elements of the linked list to front.

Examples:

Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6, k = 3
Output : 4 -> 5 -> 6 -> 1 -> 2 -> 3

Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6, k = 7
Output : 6 -> 1 -> 2 -> 3 -> 4 -> 5

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Prerequisites: Move last element to front of a given Linked List

Approach:

• Loop over (k % n) times, Where n is the number of elements of the linked list.
• Each time, delete one node from the end of the linked list.
• Simultaneously insert that deleted node at the beginning of the linked list.
• Below is the implementation of the above approach :

 `// CPP Program to move k last elements  ` `// to front in a given linked list  ` `#include ` `using` `namespace` `std; ` ` `  `// A linked list node  ` `class` `Node ` `{ ` `    ``public``: ` `     `  `    ``int` `data; ` `    ``Node* next; ` `    ``Node(``int` `d) { ` `        ``data = d; ` `        ``next = NULL; ` `    ``} ` `}; ` ` `  `// Function to add a new node at the ` `// end/tail of Linked List  ` `void` `insertAtTail(Node*& head, Node*& tail, ``int` `d ) { ` `    ``Node* newnode = ``new` `Node(d); ` `    ``if``(tail == NULL) { ` `        ``tail = head = newnode; ` `        ``return``; ` `    ``} ` ` `  `    ``tail->next = newnode; ` `    ``tail = newnode; ` `} ` ` `  `// Function to add a node at the ` `// beginning of Linked List  ` `void` `insertAtHead(Node*& head, Node*& tail,  ` `                           ``Node*& deletedNode)  ` `{ ` `    ``if``(head == NULL) { ` `        ``head = tail = deletedNode; ` `        ``return``; ` `    ``} ` `    ``deletedNode->next = head; ` `    ``head = deletedNode; ` `    ``return``; ` `} ` ` `  `// Function to add a node at the beginning of Linked List  ` `Node* deleteAtTail(Node*& head, Node*& tail) { ` `    ``Node* deleted = tail; ` `    ``Node* temp = head; ` ` `  `    ``while``(temp->next->next != NULL) { ` `        ``temp = temp->next; ` `    ``} ` ` `  `    ``temp->next = NULL; ` `    ``tail = temp; ` `    ``return` `deleted; ` `} ` ` `  `// k can be more than n, so this function takes the modulus  ` `// of k with n and delete nodes from end k  ` `// times and simultaneously insert it in front ` `void` `appendAtFront(Node*& head, Node*& tail, ``int` `n, ``int` `k)  ` `{ ` `    ``k = k % n; ` `    ``while``(k != 0) { ` `        ``Node* deleted = deleteAtTail(head, tail); ` `        ``insertAtHead(head, tail, deleted); ` `        ``k--; ` `    ``} ` `} ` ` `  `// Function to print nodes in a given linked list  ` `void` `printLinkedList(Node* head) { ` `    ``while``(head != NULL) { ` `        ``cout << head->data << ``" "``; ` `        ``head = head->next; ` `    ``} ` `    ``cout << endl; ` `} ` ` `  `// Driver Code  ` `int` `main()  ` `{ ` `    ``// Pointer to the start of the linked list ` `    ``Node* head = NULL; ` `     `  `    ``// Pointer to the end of the linked list ` `    ``Node* tail = NULL;  ` `     `  `    ``// Number of elements in the linked list ` `    ``int` `n = 6;  ` `     `  `    ``// Building linked list ` `    ``insertAtTail(head, tail, 1); ` `    ``insertAtTail(head, tail, 2); ` `    ``insertAtTail(head, tail, 3); ` `    ``insertAtTail(head, tail, 4); ` `    ``insertAtTail(head, tail, 5); ` `    ``insertAtTail(head, tail, 6); ` `     `  `     `  `    ``// Printing linked list before  ` `    ``// appending the linked list ` `    ``cout << ``"Linked List before appending: "``; ` `    ``printLinkedList(head); ` `     `  `    ``// Number of elements to be appended ` `    ``int` `k = 7; ` `     `  `    ``// Function call ` `    ``appendAtFront(head, tail, n, k);  ` `     `  `    ``// Printing linked list after appending the list ` `    ``cout << ``"Linked List after appending "``<

Output:

```Linked List before appending: 1 2 3 4 5 6
Linked List after appending 7 elements: 6 1 2 3 4 5
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :