# Traversal of Circular Linked List

• Difficulty Level : Easy
• Last Updated : 14 Nov, 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 */` `import` `java.util.*;`   `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)

Following are complete programs to demonstrate the traversal of a 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` `import` `java.util.*;`   `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()` `         `

## 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

Program to traverse a 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
Related Articles