single
Додавання елементів
Свайпніть щоб показати меню
Щоб зробити ваш однозв'язний список корисним, потрібно додавати до нього вузли. Ви реалізуєте логіку вставки вузлів у список. Ви створюватимете нові вузли, з'єднуватимете їх і інтегруватимете так, щоб список динамічно розширювався під час додавання елементів.
Такий практичний підхід допомагає зрозуміти, що саме відбувається «за лаштунками».
Реалізація вставки вузла
Напишемо просту функцію для створення вузла. Ця функція повинна:
- Приймати як аргумент число типу int, яке буде збережено у полі data вузла;
- Створювати вказівник на динамічно виділену область пам'яті (з урахуванням розміру вузла);
- Перевіряти успішність виділення пам'яті для вузла;
- Записувати потрібне значення (аргумент функції) у поле data;
- Вказівник next має бути NULL, оскільки функція створює лише один вузол;
- Функція повинна повертати вказівник на область пам'яті, де зберігається значення.
Функція AddNewNode() приймає вказівник на вказівник, оскільки вона може змінювати значення вказівника на перший (head) вузол списку, а також значення, яке буде збережено у новому вузлі:
void AddNewNode(struct Node** head, int value)
{
...
}
Якщо список порожній (*head == NULL), ми просто оновлюємо вказівник на голову списку (*head), щоб він вказував на новий вузол (newNode), у цьому випадку newNode стане першим вузлом (головним вузлом). У випадку непорожнього списку ми використовуємо цикл для пошуку останнього вузла.
Поточний вузол виконує роль буферного вузла, за його допомогою можна пройтись по списку та знайти вузол, який не вказує ні на що (*next == NULL).
struct Node* current = *head;
while (current->next != NULL)
{
...
}
Після цього потрібно зробити новий вузол newNode останнім у списку, тобто current->next має дорівнювати newNode. Тепер newNode є останнім вузлом у списку.
Завдання: визначити та додати функцію для додавання нових вузлів до існуючих.
Проведіть, щоб почати кодувати
Створення функції addNewNode, яка додає новий вузол у кінець однозв'язного списку.
Усередині функції:
- Оголосити змінну
struct Node* newNodeі створити новий вузол за допомогоюcreateNode(value). - Перевірити, чи список порожній, використовуючи умову
*head == NULL. - Якщо список порожній, присвоїти
newNodeдо*head. - Якщо список не порожній, оголосити
struct Node* currentі присвоїти йому значення*head. - Переміщатися по списку за допомогою циклу
while, покиcurrent->nextне станеNULL. - Після досягнення останнього вузла встановити
current->next = newNode.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат