Рубрики

Круговой связанный список | Набор 2 (Обход)

Мы обсудили введение и применение кругового связного списка, в предыдущем посте в круговой связанный список. В этом посте обсуждается операция обхода.

В обычном связанном списке мы пересекаем список с головного узла и прекращаем прохождение, когда достигаем NULL. В круговом связанном списке мы прекращаем обход, когда снова достигаем первого узла. Ниже приведен код C для обхода связанного списка.

/ * Функция для обхода заданного Кругового связного списка и печати узлов * /

void printList(struct Node *first)

{

    struct Node *temp = first; 

  

    // Если связанный список не пуст

    if (first != NULL) 

    {

        // Продолжаем печатать узлы, пока мы снова не достигнем первого узла

        do

        {

            printf("%d ", temp->data);

            temp = temp->next;

        }

        while (temp != first);

    }

}

Полная программа для демонстрации обхода. Ниже приведены полные программы для демонстрации обхода кругового связного списка.

C ++

// C ++ программа для реализации
// вышеуказанный подход
#include <bits/stdc++.h>

using namespace std;

  
/ * структура для узла * /

class Node 

    public:

    int data; 

    Node *next; 

}; 

  
/ * Функция для вставки узла в начале
Кругового связного списка * /

void push(Node **head_ref, int data) 

    Node *ptr1 = new Node();

    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; 

  
/ * Функция для печати узлов в
данный Круговой связанный список * /

void printList(Node *head) 

    Node *temp = head; 

    if (head != NULL) 

    

        do

        

            cout << temp->data << " "

            temp = temp->next; 

        

        while (temp != head); 

    

  
/ * Программа драйвера для проверки вышеуказанных функций * /

int main() 

    / * Инициализировать списки как пустые * /

    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); 

  

    return 0; 

  
// Это код, предоставленный rathbhupendra

С

// C программа для реализации
// вышеуказанный подход
#include<stdio.h>
#include<stdlib.h>

  
/ * структура для узла * /

struct Node

{

    int data;

    struct Node *next;

};

  
/ * Функция для вставки узла в начале циркуляра

   связанный список * /

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;

  

    / * Если связанный список не равен NULL, установить следующий из последнего узла * /

    if (*head_ref != NULL)

    {

        while (temp->next != *head_ref)

            temp = temp->next;

        temp->next = ptr1;

    }

    else

        ptr1->next = ptr1; / * Для первого узла * /

  

    *head_ref = ptr1;

}

  
/ * Функция для печати узлов в заданном круговом связанном списке * /

void printList(struct Node *head)

{

    struct Node *temp = head;

    if (head != NULL)

    {

        do

        {

            printf("%d ", temp->data);

            temp = temp->next;

        }

        while (temp != head);

    }

}

  
/ * Программа драйвера для проверки вышеуказанных функций * /

int main()

{

    / * Инициализировать списки как пустые * /

    struct Node *head = NULL;

  

    / * Созданный связанный список будет 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-программа для реализации
// вышеуказанный подход

class GFG

{

  
// узел

static class Node

{

    int data;

    Node next;

};

  
/ * Функция для вставки узла
в начале циркуляра
связанный список * /

static Node push(Node head_ref, 

                 int data)

{

    Node ptr1 = new Node();

    Node temp = head_ref;

    ptr1.data = data;

    ptr1.next = head_ref;

  

    / * Если связанный список не нулевой

    затем установите следующий из последнего узла * /

    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;

}

  
/ * Функция для печати узлов в
данный Круговой связанный список * /

static void printList(Node head)

{

    Node temp = head;

    if (head != null)

    {

        do

        {

            System.out.print(temp.data + " ");

            temp = temp.next;

        }

        while (temp != head);

    }

}

  
// Код драйвера

public static void main(String args[])

{

    / * Инициализировать списки как пустые * /

    Node head = null;

  

    / * Созданный связанный список будет

       быть 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);

}
}

  
// Этот код добавлен
// Арнаб Кунду

питон

# Программа Python для демонстрации
# круговой связанный список обхода

  
# Структура для узла

class Node:

      

    # Конструктор для создания нового узла

    def __init__(self, data):

        self.data = data 

        self.next = None

  

class CircularLinkedList:

      

    # Конструктор для создания пустого кругового связанного списка

    def __init__(self):

        self.head = None

  

    # Функция для вставки узла в начале

    # круговой связанный список

    def push(self, data):

        ptr1 = Node(data)

        temp = self.head

          

        ptr1.next = self.head

  

        # Если связанный список не None, тогда установите следующий из

        # последний узел

        if self.head is not None:

            while(temp.next != self.head):

                temp = temp.next 

            temp.next = ptr1

  

        else:

            ptr1.next = ptr1 # Для первого узла

  

        self.head = ptr1 

  

    # Функция для печати узлов в заданном круговом связанном списке

    def printList(self):

        temp = self.head

        if self.head is not None:

            while(True):

                print "%d" %(temp.data),

                temp = temp.next

                if (temp == self.head):

                    break 

  

  
# Программа драйвера для проверки вышеуказанной функции

  
# Инициализировать список как пустой

cllist = CircularLinkedList()

  
# Созданный связанный список будет 11-> 2-> 56-> 12

cllist.push(12)

cllist.push(56)

cllist.push(2)

cllist.push(11)

  

print "Contents of circular Linked List"

cllist.printList()

            
# Этот код предоставлен
# Никхил Кумар Сингх (nickzuck_007)

C #

// C # программа для реализации
// вышеуказанный подход

using System;

class GFG 

  
// узел

class Node 

    public int data; 

    public Node next; 

}; 

  
/ * Функция для вставки узла
в начале циркуляра
связанный список * /

static Node push(Node head_ref, 

                int data) 

    Node ptr1 = new Node(); 

    Node temp = head_ref; 

    ptr1.data = data; 

    ptr1.next = head_ref; 

  

    / * Если связанный список не нулевой

    затем установите следующий из последнего узла * /

    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; 

  
/ * Функция для печати узлов в
данный Круговой связанный список * /

static void printList(Node head) 

    Node temp = head; 

    if (head != null

    

        do

        

            Console.Write(temp.data + " "); 

            temp = temp.next; 

        

        while (temp != head); 

    

  
// Код драйвера

static public void Main(String []args) 

    / * Инициализировать списки как пустые * /

    Node head = null

  

    / * Созданный связанный список будет

    быть 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); 


  
// Этот код добавлен
// Арнаб Кунду


Выход:

Contents of Circular Linked List
11 2 56 12

Вы можете видеть следующие сообщения в Циркулярном связанном списке
Разделить круговой связанный список на две половины
Сортированная вставка для круглого связанного списка

Вскоре мы обсудим реализацию операций удаления вставки для циклически связанных списков.

Пожалуйста, напишите комментарии, если вы обнаружите какую-либо ошибку в приведенном выше коде / алгоритме, или найдете другие способы решения той же проблемы.

Рекомендуемые посты:

Круговой связанный список | Набор 2 (Обход)

0.00 (0%) 0 votes