Эффективные методы вставки и удаления узлов в начале самоссылающегося связанного списка

Ниже представлена ​​реализация программы на языке C для вставки и удаления нового узла в начале самоссылающегося связанного списка:

#include <stdio.h>
#include <stdlib.h>
// Structure for a node
struct Node {
    int data;
    struct Node* next;
};
// Function to insert a new node at the beginning of the linked list
void insertNode(struct Node head, int newData) {
    // Allocate memory for new node
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    // Assign data to the new node
    newNode->data = newData;
    // Point the new node to the current head
    newNode->next = *head;
    // Set the new node as the head
    *head = newNode;
}
// Function to delete the first node of the linked list
void deleteNode(struct Node head) {
    if (*head == NULL) {
        printf("The list is already empty!\n");
        return;
    }
// Store the current head node
    struct Node* temp = *head;
    // Move the head to the next node
    *head = (*head)->next;
    // Free the memory occupied by the previous head node
    free(temp);
}
// Function to display the linked list
void displayList(struct Node* node) {
    while (node != NULL) {
        printf("%d ", node->data);
        node = node->next;
    }
    printf("\n");
}
// Main function
int main() {
    struct Node* head = NULL;
    // Insert nodes at the beginning
    insertNode(&head, 5);
    insertNode(&head, 3);
    insertNode(&head, 8);
    // Display the initial linked list
    printf("Initial Linked List: ");
    displayList(head);
    // Delete the first node
    deleteNode(&head);
    // Display the updated linked list
    printf("Updated Linked List: ");
    displayList(head);
    return 0;
}

В этой программе мы определяем структуру Nodeс целым числом dataи самоссылающимся указателем next. Функция insertNodeвставляет новый узел в начало связанного списка, создавая новый узел, указывая его на текущий заголовок и обновляя заголовок новым узлом. Функция deleteNodeудаляет первый узел, перемещая головку к следующему узлу и освобождая память, занятую предыдущей головкой. Функция displayListиспользуется для печати элементов связанного списка.

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

Теперь перейдем к написанию статьи для блога.

Введение

Связанные списки — это фундаментальные структуры данных, используемые в информатике и программировании. Связанный список состоит из узлов, где каждый узел содержит данные и ссылку на следующий узел. В этой статье мы рассмотрим эффективные методы вставки и удаления узлов в начале самореферентного связанного списка с использованием языка программирования C. Мы предоставим примеры кода, чтобы проиллюстрировать каждый метод и обсудить их временные сложности.

Метод 1: вставка узла в начало

Чтобы вставить новый узел в начало связанного списка, выполните следующие действия:

  1. Выделить память для нового узла.
  2. Назначьте новые данные новому узлу.
  3. Укажите новый узел на текущий заголовок списка.
  4. Установите новый узел в качестве нового главы списка.

Вот фрагмент кода, реализующий этот метод:

// Function to insert a new node at the beginning of the linked list
void insertNode(struct Node head, int newData) {
    // Allocate memory for new node
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    // Assign data to the new node
    newNode->data = newData;
    // Point the new node to the current head
    newNode->next = *head;
    // Set the new node as the head
    *head = newNode;
}

Метод 2: удаление первого узла

Чтобы удалить первый узел связанного списка, мы выполняем следующие шаги:

  1. Проверьте, пуст ли список. Если да, распечатайте соответствующее сообщение и вернитесь.
  2. Сохраните текущий головной узел во временной переменной.
  3. Переместить голову на следующий узел.
  4. Освободите память, занятую предыдущим головным узлом.

Вот фрагмент кода, реализующий этот метод:

// Function to delete the first node of the linked list
void deleteNode(struct Node head) {
    if (*head == NULL) {
        printf("Thelist is already empty!\n");
        return;
    }
// Store the current head node
    struct Node* temp = *head;
    // Move the head to the next node
    *head = (*head)->next;
    // Free the memory occupied by the previous head node
    free(temp);
}

Заключение

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

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