Рубрики

Программа Python для обращения к связанному списку

Учитывая указатель на головной узел связанного списка, задача состоит в том, чтобы полностью изменить связанный список. Нам нужно изменить список, изменив ссылки между узлами.

Примеры:

Input : Head of following linked list  
       1->2->3->4->NULL
Output : Linked list should be changed to,
       4->3->2->1->NULL

Input : Head of following linked list  
       1->2->3->4->5->NULL
Output : Linked list should be changed to,
       5->4->3->2->1->NULL

Input : NULL
Output : NULL

Input  : 1->NULL
Output : 1->NULL

Итерационный метод

питон

# Программа Python для обращения к связанному списку
# Сложность времени: O (n)
# Сложность пространства: O (1)

  
# Класс узла

class Node:

  

    # Конструктор для инициализации объекта узла

    def __init__(self, data):

        self.data = data

        self.next = None

  

class LinkedList:

  

    # Функция для инициализации головы

    def __init__(self):

        self.head = None

  

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

    def reverse(self):

        prev = None

        current = self.head

        while(current is not None):

            next = current.next

            current.next = prev

            prev = current

            current = next

        self.head = prev

          

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

    def push(self, new_data):

        new_node = Node(new_data)

        new_node.next = self.head

        self.head = new_node

  

    # Утилита для печати связанного LinkedList

    def printList(self):

        temp = self.head

        while(temp):

            print temp.data,

            temp = temp.next

  

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

llist = LinkedList()

llist.push(20)

llist.push(4)

llist.push(15)

llist.push(85)

  

print "Given Linked List"

llist.printList()
llist.reverse()

print "\nReversed Linked List"

llist.printList()

  
# Этот код предоставлен Nikhil Kumar Singh (nickzuck_007)

Рекурсивный метод:

void recursiveReverse(struct Node** head_ref)

{

    struct Node* first;

    struct Node* rest;

       

    / * пустой список * /

    if (*head_ref == NULL)

       return;   

  

    / * предположим, что first = {1, 2, 3}, rest = {2, 3} * /

    first = *head_ref;  

    rest  = first->next;

  

    / * Список имеет только один узел * /

    if (rest == NULL)

       return;   

  

    / * инвертировать список остальных и поместить первый элемент в конец * /

    recursiveReverse(&rest);

    first->next->next  = first;  

      

    / * хитрый шаг - см. диаграмму * /

    first->next  = NULL;          

  

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

    *head_ref = rest;              

}

Более простой и рекурсивный метод

питон

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

  
# Класс узла

class Node:

  

    # Конструктор для инициализации объекта узла

    def __init__(self, data):

        self.data = data

        self.next = None

  

class LinkedList:

  

    # Функция для инициализации головы

    def __init__(self):

        self.head = None

  

  

    def reverseUtil(self, curr, prev):

          

        # Если последний узел пометил его головой

        if curr.next is None :

            self.head = curr 

              

            # Обновление рядом с предыдущим узлом

            curr.next = prev

            return 

          

        # Сохранить узел curr.next для рекурсивного вызова

        next = curr.next

  

        # И обновлять дальше

        curr.next = prev

      

        self.reverseUtil(next, curr) 

  

  

    # Эта функция в основном вызывает reverseUtil ()

    # с предыдущим как None

    def reverse(self):

        if self.head is None:

            return 

        self.reverseUtil(self.head, None)

  

  

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

    def push(self, new_data):

        new_node = Node(new_data)

        new_node.next = self.head

        self.head = new_node

  

    # Утилита для печати связанного LinkedList

    def printList(self):

        temp = self.head

        while(temp):

            print temp.data,

            temp = temp.next

  

  
# Драйверная программа

llist = LinkedList()

llist.push(8)

llist.push(7)

llist.push(6)

llist.push(5)

llist.push(4)

llist.push(3)

llist.push(2)

llist.push(1)

  

print "Given linked list"

llist.printList()

  
llist.reverse()

  

print "\nReverse linked list"

llist.printList()

  
# Этот код предоставлен Nikhil Kumar Singh (nickzuck_007)

Пожалуйста, обратитесь к полной статье на Обратный связанный список для более подробной информации!

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

Программа Python для обращения к связанному списку

0.00 (0%) 0 votes