Related Articles

# Reverse a circular linked list

• Difficulty Level : Easy
• Last Updated : 22 Jun, 2021

Given a circular linked list of size n. The problem is to reverse the given circular linked list by changing links between the nodes.
Examples:
INPUT: OUTPUT: Approach: The approach is same as followed in reversing a singly linked list. Only here we have to make one more adjustment by linking the last node of the reversed list to the first node.

## C++

 `// C++ implementation to reverse``// a circular linked list``#include ` `using` `namespace` `std;` `// Linked list node``struct` `Node {``    ``int` `data;``    ``Node* next;``};` `// function to get a new node``Node* getNode(``int` `data)``{``    ``// allocate memory for node``    ``Node* newNode = ``new` `Node;` `    ``// put in the data``    ``newNode->data = data;``    ``newNode->next = NULL;``    ``return` `newNode;``}` `// Function to reverse the circular linked list``void` `reverse(Node** head_ref)``{``    ``// if list is empty``    ``if` `(*head_ref == NULL)``        ``return``;` `    ``// reverse procedure same as reversing a``    ``// singly linked list``    ``Node* prev = NULL;``    ``Node* current = *head_ref;``    ``Node* next;``    ``do` `{``        ``next = current->next;``        ``current->next = prev;``        ``prev = current;``        ``current = next;``    ``} ``while` `(current != (*head_ref));` `    ``// adjutsing the links so as to make the``    ``// last node point to the first node``    ``(*head_ref)->next = prev;``    ``*head_ref = prev;``}` `// Function to print circular linked list``void` `printList(Node* head)``{``    ``if` `(head == NULL)``        ``return``;` `    ``Node* temp = head;``    ``do` `{``        ``cout << temp->data << ``" "``;``        ``temp = temp->next;``    ``} ``while` `(temp != head);``}` `// Driver program to test above``int` `main()``{``    ``// Create a circular linked list``    ``// 1->2->3->4->1``    ``Node* head = getNode(1);``    ``head->next = getNode(2);``    ``head->next->next = getNode(3);``    ``head->next->next->next = getNode(4);``    ``head->next->next->next->next = head;` `    ``cout << ``"Given circular linked list: "``;``    ``printList(head);` `    ``reverse(&head);` `    ``cout << ``"\nReversed circular linked list: "``;``    ``printList(head);` `    ``return` `0;``}`

## Java

 `// Java implementation to reverse``// a circular linked list``class` `GFG``{` `// Linked list node``static` `class` `Node``{``    ``int` `data;``    ``Node next;``};` `// function to get a new node``static` `Node getNode(``int` `data)``{``    ``// allocate memory for node``    ``Node newNode = ``new` `Node();` `    ``// put in the data``    ``newNode.data = data;``    ``newNode.next = ``null``;``    ``return` `newNode;``}` `// Function to reverse the circular linked list``static` `Node reverse(Node head_ref)``{``    ``// if list is empty``    ``if` `(head_ref == ``null``)``        ``return` `null``;` `    ``// reverse procedure same as reversing a``    ``// singly linked list``    ``Node prev = ``null``;``    ``Node current = head_ref;``    ``Node next;``    ``do``    ``{``        ``next = current.next;``        ``current.next = prev;``        ``prev = current;``        ``current = next;``    ``} ``while` `(current != (head_ref));` `    ``// adjutsing the links so as to make the``    ``// last node point to the first node``    ``(head_ref).next = prev;``    ``head_ref = prev;``    ``return` `head_ref;``}` `// Function to print circular linked list``static` `void` `printList(Node head)``{``    ``if` `(head == ``null``)``        ``return``;` `    ``Node temp = head;``    ``do``    ``{``        ``System.out.print( temp.data + ``" "``);``        ``temp = temp.next;``    ``} ``while` `(temp != head);``}` `// Driver code``public` `static` `void` `main(String args[])``{``    ``// Create a circular linked list``    ``// 1.2.3.4.1``    ``Node head = getNode(``1``);``    ``head.next = getNode(``2``);``    ``head.next.next = getNode(``3``);``    ``head.next.next.next = getNode(``4``);``    ``head.next.next.next.next = head;` `    ``System.out.print(``"Given circular linked list: "``);``    ``printList(head);` `    ``head = reverse(head);` `    ``System.out.print(``"\nReversed circular linked list: "``);``    ``printList(head);` `}``}` `// This code is contributed by Arnab Kundu`

## Python3

 `# Python3 implementation to reverse``# a circular linked list``import` `math` `# Linked list node``class` `Node:``    ``def` `__init__(``self``, data):``        ``self``.data ``=` `data``        ``self``.``next` `=` `None` `# function to get a new node``def` `getNode(data):``    ` `    ``# allocate memory for node``    ``newNode ``=` `Node(data)` `    ``# put in the data``    ``newNode.data ``=` `data``    ``newNode.``next` `=` `None``    ``return` `newNode` `# Function to reverse the``# circular linked list``def` `reverse(head_ref):``    ` `    ``# if list is empty``    ``if` `(head_ref ``=``=` `None``):``        ``return` `None` `    ``# reverse procedure same as``    ``# reversing a singly linked list``    ``prev ``=` `None``    ``current ``=` `head_ref``    ` `    ``next` `=` `current.``next``    ``current.``next` `=` `prev``    ``prev ``=` `current``    ``current ``=` `next``    ``while` `(current !``=` `head_ref):``        ``next` `=` `current.``next``        ``current.``next` `=` `prev``        ``prev ``=` `current``        ``current ``=` `next` `    ``# adjutsing the links so as to make the``    ``# last node po to the first node``    ``head_ref.``next` `=` `prev``    ``head_ref ``=` `prev``    ``return` `head_ref` `# Function to print circular linked list``def` `prList(head):``    ``if` `(head ``=``=` `None``):``        ``return` `    ``temp ``=` `head``    ` `    ``print``(temp.data, end ``=` `" "``)``    ``temp ``=` `temp.``next``    ``while` `(temp !``=` `head):``        ``print``(temp.data, end ``=` `" "``)``        ``temp ``=` `temp.``next` `# Driver Code``if` `__name__``=``=``'__main__'``:``    ` `    ``# Create a circular linked list``    ``# 1.2.3.4.1``    ``head ``=` `getNode(``1``)``    ``head.``next` `=` `getNode(``2``)``    ``head.``next``.``next` `=` `getNode(``3``)``    ``head.``next``.``next``.``next` `=` `getNode(``4``)``    ``head.``next``.``next``.``next``.``next` `=` `head` `    ``print``(``"Given circular linked list: "``,``                                ``end ``=` `"")``    ``prList(head)` `    ``head ``=` `reverse(head)` `    ``print``(``"\nReversed circular linked list: "``,``                                     ``end ``=` `"")``    ``prList(head)` `# This code is contributed by Srathore`

## C#

 `// C# implementation to reverse``// a circular linked list``using` `System;` `class` `GFG``{` `    ``// Linked list node``    ``public` `class` `Node``    ``{``        ``public` `int` `data;``        ``public` `Node next;``    ``};``    ` `    ``// function to get a new node``    ``static` `Node getNode(``int` `data)``    ``{``        ``// allocate memory for node``        ``Node newNode = ``new` `Node();``    ` `        ``// put in the data``        ``newNode.data = data;``        ``newNode.next = ``null``;``        ``return` `newNode;``    ``}``    ` `    ``// Function to reverse the circular linked list``    ``static` `Node reverse(Node head_ref)``    ``{``        ``// if list is empty``        ``if` `(head_ref == ``null``)``            ``return` `null``;``    ` `        ``// reverse procedure same as reversing a``        ``// singly linked list``        ``Node prev = ``null``;``        ``Node current = head_ref;``        ``Node next;``        ``do``        ``{``            ``next = current.next;``            ``current.next = prev;``            ``prev = current;``            ``current = next;``        ``} ``while` `(current != (head_ref));``    ` `        ``// adjutsing the links so as to make the``        ``// last node point to the first node``        ``(head_ref).next = prev;``        ``head_ref = prev;``        ``return` `head_ref;``    ``}``    ` `    ``// Function to print circular linked list``    ``static` `void` `printList(Node head)``    ``{``        ``if` `(head == ``null``)``            ``return``;``    ` `        ``Node temp = head;``        ``do``        ``{``            ``Console.Write( temp.data + ``" "``);``            ``temp = temp.next;``        ``} ``while` `(temp != head);``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main(String []args)``    ``{``        ``// Create a circular linked list``        ``// 1.2.3.4.1``        ``Node head = getNode(1);``        ``head.next = getNode(2);``        ``head.next.next = getNode(3);``        ``head.next.next.next = getNode(4);``        ``head.next.next.next.next = head;``    ` `        ``Console.Write(``"Given circular linked list: "``);``        ``printList(head);``    ` `        ``head = reverse(head);``    ` `        ``Console.Write(``"\nReversed circular linked list: "``);``        ``printList(head);``    ` `    ``}``}` `// This code contributed by Rajput-Ji`

## Javascript

 ``

Output:

```Given circular linked list: 1 2 3 4
Reversed circular linked list: 4 3 2 1```

Time Complexity: O(n)
This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.