Доброго дня. Есть вот такой код видалення елемента зі списку
Початок відпрацьовується добре, тобто перший елемент він видаляє, а ось інші елементи чомусь не виходить. Думаю над цим уже другий день, голова кипить. Уявляю собі алгоритм так:
- видаляємо елемент
- Зміщуємо інші елементи списку (зліва до удаляемому або праворуч?)
або взагалі зробити так 1. Видаляємо елемент
- Проходимо весь список поки не натрапимо на віддалений (NULL)
- Перекидаємо посилання з елемента перед віддаленим на елемент після віддаленого (минаючи сам віддалений елемент)
- Повторюємо п.3 поки не буде нульових елементів. З огляду на, що кінець списку ми не розглядаємо.
Всім величезне спасибі за допомогу! Відкрив багато нового для себе в роботі з покажчиками. Окрема подяка
@MichaelPak за вказівку напрямки в яку варто копати і вказівки конкретної помилки і докладного пояснення,
@Mike за те, що насварив за використання нераціонального алгоритму
@alexolut за те, що підказав різницю в між ned delete і malloc free
@Vlad from Moscow за докладний рішення задачі і класну ідею про використання змінної беззнакового типу (так і зробив в результаті).
Я вам дуже вдячний, спасибо большое!
Списки гірше масивів тим, що в списках можна звернутися до елементу відразу: для цього необхідно пройтись через попередні елементи. Тому процес видалення виглядає наступним чином:
Таким чином з такого картини:
У тебе ж проблема полягає в тому, що ти спочатку видаляєш елемент, а потім намагаєшся знайти посилання на наступний, тобто helping-> Next-> Next після видалення вже не вказує на 3-ий елемент. Спробуй спочатку провести роботу з покажчиками, а вже потім видалити елемент.
відповідь даний 18 Листопада '15 о 5:46
Відмінні ілюстрації) - Kromster 18 Листопада '15 в 5:58
2 рази бігати по ланцюжку - це перебір. Краще, рухаючись по ланцюжку, запам'ятовувати попередній елемент.
відповідь даний 18 Листопада '15 о 6:40