# Circular Linked List | Set 2 (Traversal)

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 C code for linked list traversal.
 `/* 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);` `    ``}` `}`
Complete C program to demonstrate traversal. Following is complete C program to demonstrate traversal of circular linked list.
 `#include` `#include` `/* structure for a node */` `struct` `node` `{` `    ``int` `data;` `    ``struct` `node *next;` `};` `/* Function to insert a node at the begining 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;` `}`
Output:
```Contents of Circular Linked List
11 2 56 12```
You may like to see following posts on Circular Linked ListWe will soon be discussing implementation of insert delete operations for circular linked lists.
Please write comments if you find any bug in above code/algorithm, or find other ways to solve the same problem