Move first element to end of a given Linked List

24 Jun, 2021
Write a C function that moves first element to end 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 2->3->4->5->1.
Algorithm: 
Traverse the list till last node. Use two pointers: one to store the address of last node(last) and other for address of first node(first). After the end of loop do following operations. i) Make head as second node (*head_ref = first->next). ii) Set next of first as NULL (first->next = NULL). iii) Set next of last as first ( last->next = first) 
C++
Java
Python3
C#
Javascript
/* C++ Program to move first element to end   in a given linked list */#include <stdio.h>#include <stdlib.h> /* A linked list node */struct Node {    int data;    struct Node* next;}; /* We are using a double pointer head_ref   here because we change head of the linked   list inside this function.*/void moveToEnd(struct Node** head_ref){    /* If linked list is empty, or it contains       only one node, then nothing needs to be       done, simply return */    if (*head_ref == NULL || (*head_ref)->next == NULL)        return;     /* Initialize first and last pointers */    struct Node* first = *head_ref;    struct Node* last = *head_ref;     /*After this loop last contains address    of last node in Linked List */    while (last->next != NULL) {        last = last->next;    }     /* Change the head pointer to point       to second node now */    *head_ref = first->next;     /* Set the next of first as NULL */    first->next = NULL;     /* Set the next of last as first */    last->next = first;} /* UTILITY FUNCTIONS *//* Function to add a node at the beginning   of Linked List */void push(struct Node** head_ref, int new_data){    struct Node* new_node = new Node;    new_node->data = new_data;    new_node->next = (*head_ref);    (*head_ref) = new_node;} /* Function to print nodes in a given linked list */void printList(struct Node* node){    while (node != NULL) {        printf("%d ", node->data);        node = node->next;    }} /* Driver program to test above function */int main(){    struct Node* start = NULL;     /* The constructed linked list is:     1->2->3->4->5 */    push(&start, 5);    push(&start, 4);    push(&start, 3);    push(&start, 2);    push(&start, 1);     printf("\n Linked list before moving first to end\n");    printList(start);     moveToEnd(&start);     printf("\n Linked list after moving first to end\n");    printList(start);     return 0;}
/* Java Program to move first element to endin a given linked list */class Sol{     /* A linked list node */static class Node{    int data;    Node next;}; /* We are using a double pointer head_refhere because we change head of the linkedlist inside this function.*/static Node moveToEnd( Node head_ref){    /* If linked list is empty, or it contains    only one node, then nothing needs to be    done, simply return */    if (head_ref == null || (head_ref).next == null)        return null;     /* Initialize first and last pointers */    Node first = head_ref;    Node last = head_ref;     /*After this loop last contains address    of last node in Linked List */    while (last.next != null)    {        last = last.next;    }     /* Change the head pointer to point    to second node now */    head_ref = first.next;     /* Set the next of first as null */    first.next = null;     /* Set the next of last as first */    last.next = first;    return head_ref;} /* UTILITY FUNCTIONS *//* Function to add a node at the beginningof Linked List */static Node push( Node head_ref, int new_data){    Node new_node = new Node();    new_node.data = new_data;    new_node.next = (head_ref);    (head_ref) = new_node;    return head_ref;} /* Function to print nodes in a given linked list */static void printList( Node node){    while (node != null)    {        System.out.printf("%d ", node.data);        node = node.next;    }} /* Driver code */public static void main(String args[]){    Node start = null;     /* The constructed linked list is:    1.2.3.4.5 */    start = push(start, 5);    start = push(start, 4);    start = push(start, 3);    start = push(start, 2);    start = push(start, 1);     System.out.printf("\n Linked list before moving first to end\n");    printList(start);     start = moveToEnd(start);     System.out.printf("\n Linked list after moving first to end\n");    printList(start);}} // This code is contributed by Arnab Kundu
# Python3 Program to move first element to end# in a given linked list # A linked list nodeclass Node:    def __init__(self):        self.data = 0        self.next = None # We are using a double pointer head_ref# here because we change head of the linked# list inside this function.def moveToEnd( head_ref) :     # If linked list is empty, or it contains    # only one node, then nothing needs to be    # done, simply return    if (head_ref == None or (head_ref).next == None) :        return None     # Initialize first and last pointers    first = head_ref    last = head_ref     # After this loop last contains address    # of last node in Linked List    while (last.next != None) :             last = last.next         # Change the head pointer to point    # to second node now    head_ref = first.next     # Set the next of first as None    first.next = None     # Set the next of last as first    last.next = first    return head_ref # UTILITY FUNCTIONS# Function to add a node at the beginning# of Linked Listdef push( head_ref, new_data) :     new_node = Node()    new_node.data = new_data    new_node.next = (head_ref)    (head_ref) = new_node    return head_ref # Function to print nodes in a given linked listdef printList(node) :     while (node != None):             print(node.data, end = " ")        node = node.next     # Driver code start = None # The constructed linked list is:#1.2.3.4.5start = push(start, 5)start = push(start, 4)start = push(start, 3)start = push(start, 2)start = push(start, 1) print("\n Linked list before moving first to end")printList(start) start = moveToEnd(start) print("\n Linked list after moving first to end")printList(start) # This code is contributed by Arnab Kundu
/* C# Program to move first element to endin a given linked list */using System; class GFG{     /* A linked list node */public class Node{    public int data;    public Node next;}; /* We are using a double pointer head_refhere because we change head of the linkedlist inside this function.*/static Node moveToEnd( Node head_ref){    /* If linked list is empty, or it contains    only one node, then nothing needs to be    done, simply return */    if (head_ref == null || (head_ref).next == null)        return null;     /* Initialize first and last pointers */    Node first = head_ref;    Node last = head_ref;     /*After this loop last contains address    of last node in Linked List */    while (last.next != null)    {        last = last.next;    }     /* Change the head pointer to point    to second node now */    head_ref = first.next;     /* Set the next of first as null */    first.next = null;     /* Set the next of last as first */    last.next = first;    return head_ref;} /* UTILITY FUNCTIONS *//* Function to add a node at the beginningof Linked List */static Node push( Node head_ref, int new_data){    Node new_node = new Node();    new_node.data = new_data;    new_node.next = (head_ref);    (head_ref) = new_node;    return head_ref;} /* Function to print nodes in a given linked list */static void printList( Node node){    while (node != null)    {        Console.Write("{0} ", node.data);        node = node.next;    }} /* Driver code */public static void Main(String []args){    Node start = null;     /* The constructed linked list is:    1.2.3.4.5 */    start = push(start, 5);    start = push(start, 4);    start = push(start, 3);    start = push(start, 2);    start = push(start, 1);     Console.Write("\n Linked list before moving first to end\n");    printList(start);     start = moveToEnd(start);     Console.Write("\n Linked list after moving first to end\n");    printList(start);}} // This code is contributed by 29AjayKumar
<script> // JavaScript program to move first element// to end in a given linked list /* A linked list node */class Node{    constructor()    {        this.data = 0;        this.next = null;    }} /* We are using a double pointer head_refhere because we change head of the linkedlist inside this function.*/function moveToEnd(head_ref){         /* If linked list is empty, or it contains    only one node, then nothing needs to be    done, simply return */    if (head_ref == null || head_ref.next == null)        return null;         /* Initialize first and last pointers */    var first = head_ref;    var last = head_ref;         /*After this loop last contains address    of last node in Linked List */    while (last.next != null)    {        last = last.next;    }         /* Change the head pointer to point    to second node now */    head_ref = first.next;         /* Set the next of first as null */    first.next = null;         /* Set the next of last as first */    last.next = first;    return head_ref;} /* UTILITY FUNCTIONS *//* Function to add a node at the beginningof Linked List */function push(head_ref, new_data){    var new_node = new Node();    new_node.data = new_data;    new_node.next = head_ref;    head_ref = new_node;    return head_ref;} // Function to print nodes in// a given linked listfunction printList(node){    while (node != null)    {        document.write(node.data + " ");        node = node.next;    }} // Driver codevar start = null; // The constructed linked list is:// 1.2.3.4.5start = push(start, 5);start = push(start, 4);start = push(start, 3);start = push(start, 2);start = push(start, 1); document.write("Linked list before " +               "moving first to end<br>");printList(start);start = moveToEnd(start); document.write("<br> Linked list after moving " +               "first to end<br>");printList(start); // This code is contributed by rdtank </script>
Linked list before moving first to end
1 2 3 4 5 
 Linked list after moving first to end
2 3 4 5 1
 
Time Complexity: O(n) where n is the number of nodes in the given Linked List. 
andrew1234
29AjayKumar
Akanksha_Rai
rdtank
Linked List
Linked List
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Data Structures
What is Data Structure: Types, Classifications and Applications
Types of Linked List
Circular Singly Linked List | Insertion
Find first node of loop in a linked list
Add two numbers represented by linked lists | Set 2
Flattening a Linked List
Real-time application of Data Structures
Insert a node at a specific position in a linked list
Clone a linked list with next and random pointer | Set 1