Write a function that moves the last element to the front in a given Singly Linked List. For example, if the given Linked List is 1->2->3->4->5, then the function should change the list to 5->1->2->3->4. Algorithm: Traverse the list till the last node. Use two pointers: one to store the address of the last node and the other for the address of the second last node. After the end of the loop do the following operations.
- Make second last as last (secLast->next = NULL).
- Set next of last as head (last->next = *head_ref).
- Make last as head ( *head_ref = last).
Java
/* Java Program to move last element to   front in a given linked list */class LinkedList{    // Head of list    Node head;       // Linked list Node    class Node    {        int data;        Node next;        Node(int d)        {            data = d;            next = null;        }    }Â
    void moveToFront()    {        /* If linked list is empty or           it contains only one node           then simply return. */           if(head == null ||              head.next == null)              return;Â
        /* Initialize second last and           last pointers */        Node secLast = null;        Node last = head;Â
        /* After this loop secLast contains           address of second last node and           last contains address of last node           in Linked List */        while (last.next != null)         {           secLast = last;           last = last.next;        }Â
        // Set the next of second last as null        secLast.next = null;Â
        // Set the next of last as head        last.next = head;Â
        // Change head to point to        // last node.        head = last;    }             Â
     // Utility functions    /* Inserts a new Node at front       of the list. */    public void push(int new_data)    {        /* 1 & 2: Allocate the Node &                  Put in the data*/        Node new_node = new Node(new_data);          // 3. Make next of new Node as head        new_node.next = head;          // 4. Move the head to point to        // new Node        head = new_node;    }Â
    // Function to print linked list    void printList()    {        Node temp = head;        while(temp != null)        {           System.out.print(temp.data + " ");           temp = temp.next;        }         System.out.println();    }Â
    // Driver code    public static void main(String args[])    {        LinkedList llist = new LinkedList();Â
        /* Constructed Linked List is           1->2->3->4->5->null */        llist.push(5);        llist.push(4);        llist.push(3);        llist.push(2);        llist.push(1);                 System.out.println(               "Linked List before moving last to front ");        llist.printList();                 llist.moveToFront();                 System.out.println(               "Linked List after moving last to front ");        llist.printList();    }}// This code is contributed by Rajat Mishra |
Output:
Linked list before moving last to front 1 2 3 4 5 Linked list after removing last to front 5 1 2 3 4
Time Complexity: O(n) where n is the number of nodes in the given Linked List.
Space Complexity: O(1) because using constant variables
Please refer complete article on Move last element to front of a given Linked List for more details!
