# Circular Linked List | Set 2 (Traversal)

• Difficulty Level : Easy
• Last Updated : 26 Jul, 2022

We have discussed Circular Linked List Introduction and Applications, in the previous post on Circular Linked List. In this post, traversal operation is discussed. In a conventional linked list, we traverse the list from the head node and stop the traversal when we reach NULL. In a circular linked list, we stop traversal when we reach the first node again. Following is the C code for the linked list traversal.

## C++

 `/* Function to print nodes in ` `a given Circular linked list */` `void` `printList(Node* head) ` `{ ` `    ``Node* temp = head; ` ` `  `    ``// If linked list is not empty ` `    ``if` `(head != NULL) { ` ` `  `        ``// Print nodes till we reach first node again ` `        ``do` `{ ` `            ``cout << temp->data << ``" "``; ` `            ``temp = temp->next; ` `        ``} ``while` `(temp != head); ` `    ``} ` `}`

## C

 `/* Function to traverse a given Circular linked list and print nodes */` `void` `printList(``struct` `Node *first) ` `{ ` `    ``struct` `Node *temp = first;  ` ` `  `    ``// If linked list is not empty ` `    ``if` `(first != NULL)  ` `    ``{ ` `        ``// Keep printing nodes till we reach the first node again ` `        ``do` `        ``{ ` `            ``printf``(``"%d "``, temp->data); ` `            ``temp = temp->next; ` `        ``} ` `        ``while` `(temp != first); ` `    ``} ` `} `

## Java

 `/* Function to print nodes in a ` `given Circular linked list */` `static` `void` `printList(Node head) ` `{ ` `    ``Node temp = head; ` `   `  `    ``// If linked list is not empty ` `    ``if` `(head != ``null``)  ` `    ``{ ` `       `  `        ``// Keep printing nodes till we reach the first node ` `        ``// again ` `        ``do`  `        ``{ ` `            ``System.out.print(temp.data + ``" "``); ` `            ``temp = temp.next; ` `        ``} ``while` `(temp != head); ` `    ``} ` `} ` ` `  `// This code is contributed by pratham76.`

## Python3

 `# Function to print nodes in a given Circular linked list ` `def` `printList(``self``): ` ` `  `    ``temp ``=` `self``.head ` ` `  `    ``# If linked list is not empty ` `    ``if` `self``.head ``is` `not` `None``: ` `        ``while``(``True``): ` ` `  `            ``# Print nodes till we reach first node again ` `            ``print``(temp.data, end``=``" "``) ` `            ``temp ``=` `temp.``next` `            ``if` `(temp ``=``=` `self``.head): ` `                ``break`

## C#

 `/* Function to print nodes in a ` `given Circular linked list */` `static` `void` `printList(Node head) ` `{ ` `    ``Node temp = head; ` `   `  `    ``// If linked list is not empty ` `    ``if` `(head != ``null``) { ` `       `  `        ``// Keep printing nodes till we reach the first node ` `        ``// again ` `        ``do` `{ ` `            ``Console.Write(temp.data + ``" "``); ` `            ``temp = temp.next; ` `        ``} ``while` `(temp != head); ` `    ``} ` `} ` ` `  `//This code is contributed by rutvik_56`

## Javascript

 ` ` Time Complexity: O(n)

Auxiliary Space: O(1)

Complete program to demonstrate traversal. Following are complete programs to demonstrate traversal of circular linked list.

## C++

 `// C++ program to implement  ` `// the above approach  ` `#include ` `using` `namespace` `std; ` ` `  `/* structure for a node */` `class` `Node  ` `{  ` `    ``public``: ` `    ``int` `data;  ` `    ``Node *next;  ` `};  ` ` `  `/* Function to insert a node at the beginning  ` `of a Circular linked list */` `void` `push(Node **head_ref, ``int` `data)  ` `{  ` `    ``Node *ptr1 = ``new` `Node(); ` `    ``Node *temp = *head_ref;  ` `    ``ptr1->data = data;  ` `    ``ptr1->next = *head_ref;  ` ` `  `    ``/* If linked list is not NULL then  ` `    ``set the next of last node */` `    ``if` `(*head_ref != NULL)  ` `    ``{  ` `        ``while` `(temp->next != *head_ref)  ` `            ``temp = temp->next;  ` `        ``temp->next = ptr1;  ` `    ``}  ` `    ``else` `        ``ptr1->next = ptr1; ``/*For the first node */` ` `  `    ``*head_ref = ptr1;  ` `}  ` ` `  `/* Function to print nodes in  ` `a given Circular linked list */` `void` `printList(Node *head)  ` `{  ` `    ``Node *temp = head;  ` `    ``if` `(head != NULL)  ` `    ``{  ` `        ``do` `        ``{  ` `            ``cout << temp->data << ``" "``;  ` `            ``temp = temp->next;  ` `        ``}  ` `        ``while` `(temp != head);  ` `    ``}  ` `}  ` ` `  `/* Driver program to test above functions */` `int` `main()  ` `{  ` `    ``/* Initialize lists as empty */` `    ``Node *head = NULL;  ` ` `  `    ``/* Created linked list will be 11->2->56->12 */` `    ``push(&head, 12);  ` `    ``push(&head, 56);  ` `    ``push(&head, 2);  ` `    ``push(&head, 11);  ` ` `  `    ``cout << ``"Contents of Circular Linked List\n "``;  ` `    ``printList(head);  ` ` `  `    ``return` `0;  ` `}  `

## C

 `// C program to implement ` `// the above approach ` `#include ` `#include ` ` `  `/* structure for a node */` `struct` `Node ` `{ ` `    ``int` `data; ` `    ``struct` `Node *next; ` `}; ` ` `  `/* Function to insert a node at the beginning of a Circular ` `   ``linked list */` `void` `push(``struct` `Node **head_ref, ``int` `data) ` `{ ` `    ``struct` `Node *ptr1 = (``struct` `Node *)``malloc``(``sizeof``(``struct` `Node)); ` `    ``struct` `Node *temp = *head_ref; ` `    ``ptr1->data = data; ` `    ``ptr1->next = *head_ref; ` ` `  `    ``/* If linked list is not NULL then set the next of last node */` `    ``if` `(*head_ref != NULL) ` `    ``{ ` `        ``while` `(temp->next != *head_ref) ` `            ``temp = temp->next; ` `        ``temp->next = ptr1; ` `    ``} ` `    ``else` `        ``ptr1->next = ptr1; ``/*For the first node */` ` `  `    ``*head_ref = ptr1; ` `} ` ` `  `/* Function to print nodes in a given Circular linked list */` `void` `printList(``struct` `Node *head) ` `{ ` `    ``struct` `Node *temp = head; ` `    ``if` `(head != NULL) ` `    ``{ ` `        ``do` `        ``{ ` `            ``printf``(``"%d "``, temp->data); ` `            ``temp = temp->next; ` `        ``} ` `        ``while` `(temp != head); ` `    ``} ` `} ` ` `  `/* Driver program to test above functions */` `int` `main() ` `{ ` `    ``/* Initialize lists as empty */` `    ``struct` `Node *head = NULL; ` ` `  `    ``/* Created linked list will be 11->2->56->12 */` `    ``push(&head, 12); ` `    ``push(&head, 56); ` `    ``push(&head, 2); ` `    ``push(&head, 11); ` ` `  `    ``printf``(``"Contents of Circular Linked List\n "``); ` `    ``printList(head); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to implement ` `// the above approach ` `class` `GFG { ` ` `  `    ``// node ` `    ``static` `class` `Node { ` `        ``int` `data; ` `        ``Node next; ` `    ``}; ` ` `  `    ``/* Function to insert a node ` `    ``at the beginning of a Circular ` `    ``linked list */` `    ``static` `Node push(Node head_ref, ``int` `data) ` `    ``{ ` `        ``Node ptr1 = ``new` `Node(); ` `        ``Node temp = head_ref; ` `        ``ptr1.data = data; ` `        ``ptr1.next = head_ref; ` ` `  `        ``/* If linked list is not null ` `        ``then set the next of last node */` `        ``if` `(head_ref != ``null``) { ` `            ``while` `(temp.next != head_ref) ` `                ``temp = temp.next; ` `            ``temp.next = ptr1; ` `        ``} ` `        ``else` `            ``ptr1.next = ptr1; ` ` `  `        ``head_ref = ptr1; ` ` `  `        ``return` `head_ref; ` `    ``} ` ` `  `    ``/* Function to print nodes in a ` `    ``given Circular linked list */` `    ``static` `void` `printList(Node head) ` `    ``{ ` `        ``Node temp = head; ` `        ``if` `(head != ``null``) { ` `            ``do` `{ ` `                ``System.out.print(temp.data + ``" "``); ` `                ``temp = temp.next; ` `            ``} ``while` `(temp != head); ` `        ``} ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``/* Initialize lists as empty */` `        ``Node head = ``null``; ` ` `  `        ``/* Created linked list will ` `           ``be 11.2.56.12 */` `        ``head = push(head, ``12``); ` `        ``head = push(head, ``56``); ` `        ``head = push(head, ``2``); ` `        ``head = push(head, ``11``); ` ` `  `        ``System.out.println(``"Contents of Circular "` `                           ``+ ``"Linked List:"``); ` `        ``printList(head); ` `    ``} ` `}`

## Python3

 `# Python program to demonstrate  ` `# circular linked list traversal  ` ` `  `# Structure for a Node ` `class` `Node: ` `     `  `    ``# Constructor to create  a new node ` `    ``def` `__init__(``self``, data): ` `        ``self``.data ``=` `data  ` `        ``self``.``next` `=` `None` ` `  `class` `CircularLinkedList: ` `     `  `    ``# Constructor to create a empty circular linked list ` `    ``def` `__init__(``self``): ` `        ``self``.head ``=` `None` ` `  `    ``# Function to insert a node at the beginning of a ` `    ``# circular linked list ` `    ``def` `push(``self``, data): ` `        ``ptr1 ``=` `Node(data) ` `        ``temp ``=` `self``.head ` `         `  `        ``ptr1.``next` `=` `self``.head ` ` `  `        ``# If linked list is not None then set the next of ` `        ``# last node ` `        ``if` `self``.head ``is` `not` `None``: ` `            ``while``(temp.``next` `!``=` `self``.head): ` `                ``temp ``=` `temp.``next`  `            ``temp.``next` `=` `ptr1 ` ` `  `        ``else``: ` `            ``ptr1.``next` `=` `ptr1 ``# For the first node ` ` `  `        ``self``.head ``=` `ptr1  ` ` `  `    ``# Function to print nodes in a given circular linked list ` `    ``def` `printList(``self``): ` `        ``temp ``=` `self``.head ` `        ``if` `self``.head ``is` `not` `None``: ` `            ``while``(``True``): ` `                ``print` `(temp.data, end``=``" "``) ` `                ``temp ``=` `temp.``next` `                ``if` `(temp ``=``=` `self``.head): ` `                    ``break`  ` `  ` `  `# Driver program to test above function ` ` `  `# Initialize list as empty ` `cllist ``=` `CircularLinkedList() ` ` `  `# Created linked list will be 11->2->56->12 ` `cllist.push(``12``) ` `cllist.push(``56``) ` `cllist.push(``2``) ` `cllist.push(``11``) ` ` `  `print` `(``"Contents of circular Linked List"``) ` `cllist.printList() ` `          `

## C#

 `// C# program to implement  ` `// the above approach  ` `using` `System; ` `class` `GFG  ` `{  ` ` `  `// node  ` `class` `Node  ` `{  ` `    ``public` `int` `data;  ` `    ``public` `Node next;  ` `};  ` ` `  `/* Function to insert a node  ` `at the beginning of a Circular  ` `linked list */` `static` `Node push(Node head_ref,  ` `                ``int` `data)  ` `{  ` `    ``Node ptr1 = ``new` `Node();  ` `    ``Node temp = head_ref;  ` `    ``ptr1.data = data;  ` `    ``ptr1.next = head_ref;  ` ` `  `    ``/* If linked list is not null  ` `    ``then set the next of last node */` `    ``if` `(head_ref != ``null``)  ` `    ``{  ` `        ``while` `(temp.next != head_ref)  ` `            ``temp = temp.next;  ` `        ``temp.next = ptr1;  ` `    ``}  ` `    ``else` `        ``ptr1.next = ptr1;  ` ` `  `    ``head_ref = ptr1;  ` `     `  `    ``return` `head_ref;  ` `}  ` ` `  `/* Function to print nodes in a  ` `given Circular linked list */` `static` `void` `printList(Node head)  ` `{  ` `    ``Node temp = head;  ` `    ``if` `(head != ``null``)  ` `    ``{  ` `        ``do` `        ``{  ` `            ``Console.Write(temp.data + ``" "``);  ` `            ``temp = temp.next;  ` `        ``}  ` `        ``while` `(temp != head);  ` `    ``}  ` `}  ` ` `  `// Driver Code  ` `static` `public` `void` `Main(String []args)  ` `{  ` `    ``/* Initialize lists as empty */` `    ``Node head = ``null``;  ` ` `  `    ``/* Created linked list will  ` `    ``be 11.2.56.12 */` `    ``head = push(head, 12);  ` `    ``head = push(head, 56);  ` `    ``head = push(head, 2);  ` `    ``head = push(head, 11);  ` ` `  `    ``Console.WriteLine(``"Contents of Circular "` `+  ` `                                ``"Linked List:"``);  ` `    ``printList(head);  ` `}  ` `}`

## Javascript

 ` `

Output:

```Contents of Circular Linked List
11 2 56 12```

Time Complexity: O(n) As we need to move through the whole list, Auxiliary Space: O(1) As no extra space is used

Complete program to traverse a Circular linked list using recursion: Program to traverse linked list using recursion is as follows:

## Python3

 `class` `Node(``object``): ` `    ``def` `__init__(``self``, data): ` `        ``self``.data ``=` `data ` `        ``self``.``next` `=` `None` ` `  ` `  `class` `CircularLinkedList: ` `    ``def` `__init__(``self``): ` `        ``self``.head ``=` `None` ` `  `    ``def` `push(``self``, data, temp``=``None``): ` `        ``if` `self``.head ``=``=` `None``: ` `            ``node ``=` `Node(data) ` `            ``self``.head ``=` `node ` `            ``node.``next` `=` `self``.head ` `            ``return` ` `  `        ``if` `temp ``=``=` `None``: ` `            ``temp ``=` `self``.head ` ` `  `        ``if` `temp.``next` `=``=` `self``.head: ` `            ``node ``=` `Node(data) ` `            ``node.``next` `=` `self``.head ` `            ``temp.``next` `=` `node ` `            ``return` ` `  `        ``self``.push(data, temp.``next``) ` ` `  `    ``def` `traverse(``self``, temp``=``None``): ` `        ``if` `temp ``=``=` `None``: ` `            ``temp ``=` `self``.head ` ` `  `        ``if` `temp.``next` `=``=` `self``.head: ` `            ``print``(temp.data, end``=``"\n"``) ` `            ``return` `        ``print``(temp.data, end``=``"-->"``) ` `        ``self``.traverse(temp.``next``) ` ` `  ` `  `if` `__name__ ``=``=` `"__main__"``: ` `    ``clist ``=` `CircularLinkedList() ` `    ``clist.push(``2``) ` `    ``clist.push(``3``) ` `    ``clist.push(``7``) ` `    ``clist.push(``5``) ` `    ``print``(``"Traversed Circular Linked List: "``, end``=``"\n"``) ` `    ``clist.traverse() `

Output

```Traversed Circular Linked List:
2-->3-->7-->5
```

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

You may like to see the following posts on Circular Linked List

We will soon be discussing the implementation of insert delete operations for circular linked lists.
Please write comments if you find any bug in the above code/algorithm, or find other ways to solve the same problem.

My Personal Notes arrow_drop_up
Recommended Articles
Page :