# Move last element to front of a given Linked List | Set 2

• Difficulty Level : Easy
• 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
```

My Personal Notes arrow_drop_up