Рубрики

Напишите функцию для удаления связанного списка

Алгоритм C / C ++: переберите связанный список и удалите все узлы по одному. Главное здесь — не получить доступ к следующему из текущего указателя, если текущий указатель удален.

В Java происходит автоматическая сборка мусора, поэтому удалить связанный список легко. Нам просто нужно изменить голову на ноль.

Реализация:

C ++

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

using namespace std;

  
/ * Узел списка ссылок * /

class Node 

    public:

    int data; 

    Node* next; 

}; 

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

void deleteList(Node** head_ref) 

      
/ * Дереф head_ref, чтобы получить реальную голову * /
Node* current = *head_ref; 
Node* next; 

  

while (current != NULL) 

    next = current->next; 

    free(current); 

    current = next; 

      
/ * deref head_ref, чтобы повлиять на реальную голову назад

    в звонилке. * /

*head_ref = NULL; 

  
/ * Дана ссылка (указатель на указатель) на голову
списка и int, нажмите новый узел на передней панели
из списка. * /

void push(Node** head_ref, int new_data) 

    / * выделить узел * /

    Node* new_node = new Node();

  

    / * вставить данные * /

    new_node->data = new_data; 

      

    / * связать старый список с новым узлом * /

    new_node->next = (*head_ref); 

      

    / * переместить голову, чтобы указать на новый узел * /

    (*head_ref) = new_node; 

  
/ * Код водителя * /

int main() 

    / * Начнем с пустого списка * /

    Node* head = NULL; 

      

    / * Используйте push () для построения списка ниже

    1-> 12-> 1-> 4-> 1 * /

    push(&head, 1); 

    push(&head, 4); 

    push(&head, 1); 

    push(&head, 12); 

    push(&head, 1); 

      

    cout << "Deleting linked list"

    deleteList(&head); 

      

    cout << "\nLinked list deleted"

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

С

// C программа для удаления связанного списка
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

  
/ * Узел списка ссылок * /

struct Node

{

    int data;

    struct Node* next;

};

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

void deleteList(struct Node** head_ref)

{

   / * Дереф head_ref, чтобы получить реальную голову * /

   struct Node* current = *head_ref;

   struct Node* next;

  

   while (current != NULL) 

   {

       next = current->next;

       free(current);

       current = next;

   }

    

   / * deref head_ref, чтобы повлиять на реальную голову назад

      в звонилке. * /

   *head_ref = NULL;

}

  
/ * Дана ссылка (указатель на указатель) на голову

  списка и int, нажмите новый узел на передней панели

  из списка. * /

void push(struct Node** head_ref, int new_data)

{

    / * выделить узел * /

    struct Node* new_node =

            (struct Node*) malloc(sizeof(struct Node));

  

    / * вставить данные * /

    new_node->data  = new_data;

     

    / * связать старый список с новым узлом * /

    new_node->next = (*head_ref);

     

    / * переместить голову, чтобы указать на новый узел * /

    (*head_ref)    = new_node;

}

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

int main()

{

    / * Начнем с пустого списка * /

    struct Node* head = NULL;

     

    / * Используйте push () для построения списка ниже

     1-> 12-> 1-> 4-> 1 * /

    push(&head, 1);

    push(&head, 4);

    push(&head, 1); 

    push(&head, 12);

    push(&head, 1);   

     

    printf("\n Deleting linked list");

    deleteList(&head);  

     

    printf("\n Linked list deleted");

}

Джава

// Java программа для удаления связанного списка

class LinkedList

{

    Node head; // заголовок списка

  

    / * Узел связанного списка * /

    class Node

    {

        int data;

        Node next;

        Node(int d) { data = d; next = null; }

    }

  

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

    void deleteList()

    {

        head = null;

    }

  

    / * Вставляет новый узел в начало списка. * /

    public void push(int new_data)

    {

        / * 1 & 2: выделить узел &

                  Введите данные * /

        Node new_node = new Node(new_data);

  

        / * 3. Сделать следующий новый узел в качестве головы * /

        new_node.next = head;

  

        / * 4. Переместить голову, чтобы указать на новый узел * /

        head = new_node;

    }

  

    public static void main(String [] args)

    {

        LinkedList llist = new LinkedList();

        / * Используйте push () для построения списка ниже

           1-> 12-> 1-> 4-> 1 * /

  

        llist.push(1);

        llist.push(4);

        llist.push(1);

        llist.push(12);

        llist.push(1);

  

        System.out.println("Deleting the list");

        llist.deleteList();

  

        System.out.println("Linked list deleted");

    }

}
// Этот код предоставлен Раджатом Мишрой

python3

# Python3 программа для удаления всех
# узлы односвязного списка

  
# Класс узла

class Node:

  

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

    def __init__(self, data):

        self.data = data # Назначить данные

        self.next = None # Инициализировать следующий как ноль

  

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

class LinkedList:

  

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

    def __init__(self):

        self.head = None

  

    def deleteList(self):

          

        # инициализировать текущий узел

        current = self.head

        while current:

            prev = current.next # переместить следующий узел

              

            # удалить текущий узел

            del current.data

              

            # установить текущий равный предыдущий узел

            current = prev 

  

    # push-функция для добавления узла перед списком

    def push(self, new_data):

  

        # Выделить узел &

        # Вставьте данные

        new_node = Node(new_data)

          

        # Сделать следующий новый узел в качестве головы

        new_node.next = self.head

          

        # Переместите голову, чтобы указать на новый узел

        self.head = new_node

  
# Используйте push () для построения ниже
# список 1-> 12-> 1-> 4-> 1

if __name__ == '__main__':

  

    llist = LinkedList()

    llist.push(1)

    llist.push(4)

    llist.push(1)

    llist.push(12)

    llist.push(1)

  

  

    print("Deleting linked list")

    llist.deleteList()

      

    print("Linked list deleted")

  

  
# Эта статья предоставлена Shrikant13

C #

// C # программа для удаления связанного списка

using System;

      

public class LinkedList

{

    Node head; // заголовок списка

  

    / * Узел связанного списка * /

    class Node

    {

        public int data;

        public Node next;

        public Node(int d) 

        

            data = d; next = null;

        }

    }

  

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

    void deleteList()

    {

        head = null;

    }

  

    / * Вставляет новый узел в начало списка. * /

    public void push(int new_data)

    {

        / * 1 & 2: выделить узел &

                Введите данные * /

        Node new_node = new Node(new_data);

  

        / * 3. Сделать следующий новый узел в качестве головы * /

        new_node.next = head;

  

        / * 4. Переместить голову, чтобы указать на новый узел * /

        head = new_node;

    }

  

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

    public static void Main(String [] args)

    {

        LinkedList llist = new LinkedList();

        / * Используйте push () для построения списка ниже

        1-> 12-> 1-> 4-> 1 * /

  

        llist.push(1);

        llist.push(4);

        llist.push(1);

        llist.push(12);

        llist.push(1);

  

        Console.WriteLine("Deleting the list");

        llist.deleteList();

  

        Console.WriteLine("Linked list deleted");

    }

}

  
// Этот код предоставлен Rajput-Ji


Выход:

 Deleting linked list
 Linked list deleted

Сложность времени: O (n)
Вспомогательное пространство: O (1)

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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

Напишите функцию для удаления связанного списка

0.00 (0%) 0 votes