В обычном связанном списке мы пересекаем список с головного узла и прекращаем прохождение, когда достигаем NULL. В круговом связанном списке мы прекращаем обход, когда снова достигаем первого узла. Ниже приведен код C для обхода связанного списка.
/ * Функция для обхода заданного Кругового связного списка и печати узлов * /
voidprintList(structNode *first)
{
structNode *temp = first;
// Если связанный список не пуст
if(first != NULL)
{
// Продолжаем печатать узлы, пока мы снова не достигнем первого узла
do
{
printf("%d ", temp->data);
temp = temp->next;
}
while(temp != first);
}
}
Полная программа для демонстрации обхода. Ниже приведены полные программы для демонстрации обхода кругового связного списка.
C ++
// C ++ программа для реализации // вышеуказанный подход #include <bits/stdc++.h>
usingnamespacestd;
/ * структура для узла * /
classNode
{
public:
intdata;
Node *next;
};
/ * Функция для вставки узла в начале Кругового связного списка * /
voidpush(Node **head_ref, intdata)
{
Node *ptr1 = newNode();
Node *temp = *head_ref;
ptr1->data = data;
ptr1->next = *head_ref;
/ * Если связанный список не равен NULL,
установить следующий из последнего узла * /
if(*head_ref != NULL)
{
while(temp->next != *head_ref)
temp = temp->next;
temp->next = ptr1;
}
else
ptr1->next = ptr1; / * Для первого узла * /
*head_ref = ptr1;
}
/ * Функция для печати узлов в данный Круговой связанный список * /
voidprintList(Node *head)
{
Node *temp = head;
if(head != NULL)
{
do
{
cout << temp->data << " ";
temp = temp->next;
}
while(temp != head);
}
}
/ * Программа драйвера для проверки вышеуказанных функций * /
intmain()
{
/ * Инициализировать списки как пустые * /
Node *head = NULL;
/ * Созданный связанный список будет 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);
return0;
}
// Это код, предоставленный rathbhupendra
С
// C программа для реализации // вышеуказанный подход #include<stdio.h> #include<stdlib.h>
Вскоре мы обсудим реализацию операций удаления вставки для циклически связанных списков.
Пожалуйста, напишите комментарии, если вы обнаружите какую-либо ошибку в приведенном выше коде / алгоритме, или найдете другие способы решения той же проблемы.