Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • DSA
  • Interview Problems on Linked List
  • Practice Linked List
  • MCQs on Linked List
  • Linked List Tutorial
  • Types of Linked List
  • Singly Linked List
  • Doubly Linked List
  • Circular Linked List
  • Circular Doubly Linked List
  • Linked List vs Array
  • Time & Space Complexity
  • Advantages & Disadvantages
Open In App
Next Article:
Print alternate nodes of a linked list using recursion
Next article icon

Iteratively Reverse a linked list using only 2 pointers (An Interesting Method)

Last Updated : 11 Sep, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

Given pointer to the head node of a linked list, the task is to reverse the linked list.

Examples: 

Input : Head of following linked list           1->2->3->4->NULL  Output : Linked list should be changed to,         4->3->2->1->NULL    Input : Head of following linked list           1->2->3->4->5->NULL  Output : Linked list should be changed to,         5->4->3->2->1->NULL

We have seen how to reverse a linked list in article Reverse a linked list. In iterative method we had used 3 pointers prev, cur and next. Below is an interesting approach that uses only two pointers. The idea is to use XOR to swap pointers. 

C++




// C++ program to reverse a linked list using two pointers.
#include <bits/stdc++.h>
using namespace std;
typedef uintptr_t ut;
  
/* Link list node */
struct Node {
    int data;
    struct Node* next;
};
  
/* Function to reverse the linked list using 2 pointers */
void reverse(struct Node** head_ref)
{
    struct Node* prev = NULL;
    struct Node* current = *head_ref;
  
    // at last prev points to new head
    while (current != NULL) {
        // This expression evaluates from left to right
        // current->next = prev, changes the link from
        // next to prev node
        // prev = current, moves prev to current node for
        // next reversal of node
        // This example of list will clear it more
        // 1->2->3->4 initially prev = 1, current = 2 Final
        // expression will be current = 1^2^3^2^1, as we
        // know that bitwise XOR of two same numbers will
        // always be 0 i.e; 1^1 = 2^2 = 0 After the
        // evaluation of expression current = 3 that means
        // it has been moved by one node from its previous
        // position
        current
            = (struct Node*)((ut)prev ^ (ut)current
                             ^ (ut)(current->next)
                             ^ (ut)(current->next = prev)
                             ^ (ut)(prev = current));
    }
  
    *head_ref = prev;
}
  
/* Function to push a node */
void push(struct Node** head_ref, int new_data)
{
    /* allocate node */
    struct Node* new_node
        = (struct Node*)malloc(sizeof(struct Node));
  
    /* put in the data  */
    new_node->data = new_data;
  
    /* link the old list of the new node */
    new_node->next = (*head_ref);
  
    /* move the head to point to the new node */
    (*head_ref) = new_node;
}
  
/* Function to print linked list */
void printList(struct Node* head)
{
    struct Node* temp = head;
    while (temp != NULL) {
        printf("%d  ", temp->data);
        temp = temp->next;
    }
}
  
/* Driver program to test above function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
  
    push(&head, 20);
    push(&head, 4);
    push(&head, 15);
    push(&head, 85);
  
    printf("Given linked list\n");
    printList(head);
    reverse(&head);
    printf("\nReversed Linked list \n");
    printList(head);
    return 0;
}
 
 

Java




// Java program to reverse a linked
// list using two pointers.
import java.util.*;
  
class Main {
  
    // Link list node
    static class Node {
        int data;
        Node next;
    };
  
    static Node head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    static void reverse()
    {
        Node prev = null;
        Node current = head_ref;
  
        // At last prev points to new head
        while (current != null) {
  
            // This expression evaluates from left to right
            // current.next = prev, changes the link from
            // next to prev node
            // prev = current, moves prev to current node
            // for next reversal of node This example of
            // list will clear it more 1.2.3.4 initially
            // prev = 1, current = 2 Final expression will
            // be current = 1^2^3^2^1, as we know that
            // bitwise XOR of two same numbers will always
            // be 0 i.e; 1^1 = 2^2 = 0 After the evaluation
            // of expression current = 3 that means it has
            // been moved by one node from its previous
            // position
            Node next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        head_ref = prev;
    }
  
    // Function to push a node
    static void push(int new_data)
    {
  
        // Allocate node
        Node new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    static void printList()
    {
        Node temp = head_ref;
        while (temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
        push(20);
        push(4);
        push(15);
        push(85);
  
        System.out.print("Given linked list\n");
        printList();
        reverse();
        System.out.print("\nReversed Linked list \n");
        printList();
    }
}
  
// This code is contributed by rutvik_56
 
 

Python3




# Iteratively Reverse a linked list using only 2 pointers (An Interesting Method)
# Python program to reverse a linked list
# Link list node
# node class
  
  
class node:
  
    # Constructor to initialize the node object
    def __init__(self, data):
        self.data = data
        self.next = None
  
  
class LinkedList:
  
    # Function to initialize head
    def __init__(self):
        self.head = None
  
    # Function to reverse the linked list
    def reverse(self):
        prev = None
        current = self.head
    # Described here https://www.geeksforgeeks.org/
    # how-to-swap-two-variables-in-one-line /
        while(current is not None):
            # This expression evaluates from left to right
            # current->next = prev, changes the link from
            # next to prev node
            # prev = current, moves prev to current node for
            # next reversal of node
            # This example of list will clear it more 1->2
            # initially prev = 1, current = 2
            # Final expression will be current = 1, prev = 2
            next, current.next = current.next, prev
            prev, current = current, next
        self.head = prev
  
    # Function to push a new node
    def push(self, new_data):
        # allocate node and put in the data
        new_node = node(new_data)
        # link the old list of the new node
        new_node.next = self.head
        # move the head to point to the new node
        self.head = new_node
  
    # Function to print the linked list
    def printList(self):
        temp = self.head
        while(temp):
            print(temp.data, end=" ")
            temp = temp.next
  
  
# Driver program to test above functions
llist = LinkedList()
llist.push(20)
llist.push(4)
llist.push(15)
llist.push(85)
  
print("Given Linked List")
llist.printList()
llist.reverse()
print("\nReversed Linked List")
llist.printList()
  
# This code is contributed by Afzal Ansari
 
 

C#




// C# program to reverse a linked
// list using two pointers.
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
  
    // Link list node
    class Node {
        public int data;
        public Node next;
    };
  
    static Node head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    static void reverse()
    {
        Node prev = null;
        Node current = head_ref;
  
        // At last prev points to new head
        while (current != null) {
  
            // This expression evaluates from left to right
            // current.next = prev, changes the link from
            // next to prev node
            // prev = current, moves prev to current node
            // for next reversal of node This example of
            // list will clear it more 1.2.3.4 initially
            // prev = 1, current = 2 Final expression will
            // be current = 1^2^3^2^1, as we know that
            // bitwise XOR of two same numbers will always
            // be 0 i.e; 1^1 = 2^2 = 0 After the evaluation
            // of expression current = 3 that means it has
            // been moved by one node from its previous
            // position
            Node next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        head_ref = prev;
    }
  
    // Function to push a node
    static void push(int new_data)
    {
  
        // Allocate node
        Node new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    static void printList()
    {
        Node temp = head_ref;
        while (temp != null) {
            Console.Write(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code
    public static void Main(string[] args)
    {
        push(20);
        push(4);
        push(15);
        push(85);
  
        Console.Write("Given linked list\n");
        printList();
        reverse();
        Console.Write("\nReversed Linked list \n");
        printList();
    }
}
  
// This code is contributed by pratham76
 
 

Javascript




<script>
// javascript program to reverse a linked 
// list using two pointers.
  
    // Link list node
class Node 
{
    constructor()
    {
        this.data = 0;
        this.next = null;
    }
}
  
    var head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    function reverse()
    {
        var prev = null;
        var current = head_ref;
  
        // At last prev points to new head
        while (current != null)
        {
  
            // This expression evaluates from left to right
            // current.next = prev, changes the link from
            // next to prev node
            // prev = current, moves prev to current node for
            // next reversal of node
            // This example of list will clear it more 1.2.3.4
            // initially prev = 1, current = 2
            // Final expression will be current = 1^2^3^2^1,
            // as we know that bitwise XOR of two same
            // numbers will always be 0 i.e; 1^1 = 2^2 = 0
            // After the evaluation of expression current = 3 that
            // means it has been moved by one node from its
            // previous position
            var next = current.next;
            current.next = prev;
            prev = current;
            current = next;
        }
        head_ref = prev;
    }
  
    // Function to push a node
    function push(new_data)
    {
  
        // Allocate node
        var new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    function printList()
    {
        var temp = head_ref;
        while (temp != null)
        {
            document.write(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code    
        push(20);
        push(4);
        push(15);
        push(85);
  
        document.write("Given linked list<br/>");
        printList();
        reverse();
        document.write("<br/>Reversed Linked list <br/>");
        printList();
  
// This code is contributed by todaysgaurav. 
</script>
 
 
Output: 
Given linked list  85  15  4  20    Reversed Linked list   20  4  15  85

 

Time Complexity: O(n) 
Auxiliary Space: O(1) since using space for prev and next

Alternate Solution : 

C++




// C++ program to reverse a linked list using two pointers.
#include <bits/stdc++.h>
using namespace std;
typedef uintptr_t ut;
  
/* Link list node */
struct Node {
    int data;
    struct Node* next;
};
  
/* Function to reverse the linked list using 2 pointers */
void reverse(struct Node** head_ref)
{
    struct Node* current = *head_ref;
    struct Node* next;
    while (current->next != NULL) {
        next = current->next;
        current->next = next->next;
        next->next = (*head_ref);
        *head_ref = next;
    }
}
  
/* Function to push a node */
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 linked list */
void printList(struct Node* head)
{
    struct Node* temp = head;
    while (temp != NULL) {
        printf("%d  ", temp->data);
        temp = temp->next;
    }
}
  
/* Driver program to test above function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
  
    push(&head, 20);
    push(&head, 4);
    push(&head, 15);
    push(&head, 85);
  
    printf("Given linked list\n");
    printList(head);
    reverse(&head);
    printf("\nReversed Linked list \n");
    printList(head);
    return 0;
}
 
 

Java




// Java program to reverse a linked
// list using two pointers.
import java.util.*;
  
class Main {
  
    // Link list node
    static class Node {
        int data;
        Node next;
    };
  
    static Node head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    static void reverse()
    {
        Node next;
        Node curr = head_ref;
        while (curr.next != null) {
            next = curr.next;
            curr.next = next.next;
            next.next = head_ref;
            head_ref = next;
        }
    }
  
    // Function to push a node
    static void push(int new_data)
    {
  
        // Allocate node
        Node new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    static void printList()
    {
        Node temp = head_ref;
        while (temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
        push(20);
        push(4);
        push(15);
        push(85);
  
        System.out.print("Given linked list\n");
        printList();
        reverse();
        System.out.print("\nReversed Linked list \n");
        printList();
    }
}
  
// This code is contributed by Abhijeet Kumar(abhijeet19403)
 
 

Python3




# Python3 program to reverse a linked list using two pointers.
  
# A linked list node 
class Node :
    def __init__(self):
        self.data = 0
        self.next = None
  
# Function to reverse the linked list using 2 pointers 
def reverse(head_ref):
  
    current = head_ref
    next= None
    while (current.next != None) :
        next = current.next
        current.next = next.next
        next.next = (head_ref)
        head_ref = next
      
    return head_ref
  
# Function to push a node 
def 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 linked list 
def printList( head):
  
    temp = head
    while (temp != None) :
        print( temp.data, end=" ")
        temp = temp.next
      
# Driver code
  
# Start with the empty list 
head = None
  
head = push(head, 20)
head = push(head, 4)
head = push(head, 15)
head = push(head, 85)
  
print("Given linked list")
printList(head)
head = reverse(head)
print("\nReversed Linked list ")
printList(head)
  
# This code is contributed by Arnab Kundu
 
 

C#




// C# program to reverse a linked
// list using two pointers.
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
  
    // Link list node
    class Node {
        public int data;
        public Node next;
    };
  
    static Node head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    static void reverse()
    {
        Node current = head_ref;
        Node next;
        while (current.next != null) {
            next = current.next;
            current.next = next.next;
            next.next = head_ref;
            head_ref = next;
        }
    }
  
    // Function to push a node
    static void push(int new_data)
    {
  
        // Allocate node
        Node new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    static void printList()
    {
        Node temp = head_ref;
        while (temp != null) {
            Console.Write(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code
    public static void Main(string[] args)
    {
        push(20);
        push(4);
        push(15);
        push(85);
  
        Console.Write("Given linked list\n");
        printList();
        reverse();
        Console.Write("\nReversed Linked list \n");
        printList();
    }
}
  
// This code is contributed by Abhijeet Kumar(abhijeet19403)
 
 

Javascript




<script>
// javascript program to reverse a linked 
// list using two pointers.
  
    // Link list node
class Node 
{
    constructor()
    {
        this.data = 0;
        this.next = null;
    }
}
  
    var head_ref = null;
  
    // Function to reverse the linked
    // list using 2 pointers
    function reverse()
    {
        var current = head_ref;
        var next;
        while (current.next != null)
        {
            next = current.next;
            current.next = next.next;
            next.next = head_ref;
            head_ref = next;
        }
    }
  
    // Function to push a node
    function push(new_data)
    {
  
        // Allocate node
        var new_node = new Node();
  
        // Put in the data
        new_node.data = new_data;
  
        // Link the old list of the new node
        new_node.next = (head_ref);
  
        // Move the head to point to the new node
        (head_ref) = new_node;
    }
  
    // Function to print linked list
    function printList()
    {
        var temp = head_ref;
        while (temp != null)
        {
            document.write(temp.data + " ");
            temp = temp.next;
        }
    }
  
    // Driver code    
        push(20);
        push(4);
        push(15);
        push(85);
  
        document.write("Given linked list<br/>");
        printList();
        reverse();
        document.write("<br/>Reversed Linked list <br/>");
        printList();
  
// This code is contributed by Abhijeet Kumar(abhijeet19403) 
</script>
 
 
Output: 
Given linked list  85  15  4  20    Reversed Linked list   20  4  15  85

 

Time Complexity : O(n) 
Auxiliary Space: O(1)

Thanks to Abhay Yadav for suggesting this approach.
 



Next Article
Print alternate nodes of a linked list using recursion

S

Shashank Mishra ( Gullu )
Improve
Article Tags :
  • DSA
  • Linked List
  • Bitwise-XOR
  • Reverse
Practice Tags :
  • Linked List
  • Reverse

Similar Reads

  • An interesting method to print reverse of a linked list
    We are given a linked list, we need to print the linked list in reverse order.Examples: Input : list : 5-> 15-> 20-> 25 Output : Reversed Linked list : 25-> 20-> 15-> 5Input : list : 85-> 15-> 4-> 20 Output : Reversed Linked list : 20-> 4-> 15-> 85Input : list : 8
    7 min read
  • Reverse alternate K nodes in a Singly Linked List - Iterative Solution
    Given a linked list and an integer K, the task is to reverse every alternate K nodes.Examples: Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> NULL, K = 3 Output: 3 2 1 4 5 6 9 8 7Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> NULL, K =
    12 min read
  • Print alternate nodes of a linked list using recursion
    Given a linked list, print alternate nodes of this linked list. Examples : Input : 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10 Output : 1 -> 3 -> 5 -> 7 -> 9 Input : 10 -> 9 Output : 10 Recursive Approach : Initialize a static variable(say flag) If flag
    6 min read
  • Reverse a Linked List in groups of given size (Iterative Approach)
    Given a Singly linked list containing n nodes. The task is to reverse every group of k nodes in the list. If the number of nodes is not a multiple of k then left-out nodes, in the end, should be considered as a group and must be reversed. Examples: Input: head: 1 -> 2 -> 3 -> 4 -> 5 -
    10 min read
  • Print the alternate nodes of linked list (Iterative Method)
    Given a linked list, print the alternate nodes of the linked list. Examples: Input : 1 -> 8 -> 3 -> 10 -> 17 -> 22 -> 29 -> 42 Output : 1 -> 3 -> 17 -> 29 Alternate nodes : 1 -> 3 -> 17 -> 29 Input : 10 -> 17 -> 33 -> 38 -> 73 Output : 10 -> 33 -
    9 min read
  • Delete a Node in a Singly Linked List with Only a Pointer
    Given only a pointer to a node to be deleted in a singly linked list. The task is to delete that node from the list. Note: The given pointer does not point to the last node of the linked list. Examples: Input: LinkedList: 1->2->3->4->5, delete_ptr = 2Output: LinkedList: 1->3->4-
    6 min read
  • Reverse alternate K nodes in a Singly Linked List
    Given a linked list, The task is to reverse alternate k nodes. If the number of nodes left at the end of the list is fewer than k, reverse these remaining nodes or leave them in their original order, depending on the alternation pattern. Example: Input: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -
    15+ min read
  • Flatten a multilevel linked list using level order traversal
    Given a linked list where in addition to the next pointer, each node has a child pointer, which may or may not point to a separate list. These child lists may have one or more children of their own to produce a multilevel linked list. Given the head of the first level of the list. The task is to fla
    9 min read
  • Point to next higher value node in a linked list with an arbitrary pointer
    Given a singly linked list with every node having an additional arbitrary pointer that currently points to NULL. The task is to make the arbitrary pointer point to the next higher-value node. A Simple Solution is to traverse all nodes one by one, for every node, find the node that has the next great
    12 min read
  • Given a linked list of line segments, remove middle points
    Given a linked list of coordinates where adjacent points either form a vertical line or a horizontal line. Delete points from the linked list which are in the middle of a horizontal or vertical line. Examples: Input: (0,10)->(1,10)->(5,10)->(7,10) | (7,5)->(20,5)->(40,5) Output: Linke
    14 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences