Однозв'язний список, видалення елемента, c - stack overflow російською

Доброго дня. Есть вот такой код видалення елемента зі списку

Початок відпрацьовується добре, тобто перший елемент він видаляє, а ось інші елементи чомусь не виходить. Думаю над цим уже другий день, голова кипить. Уявляю собі алгоритм так:

  1. видаляємо елемент
  2. Зміщуємо інші елементи списку (зліва до удаляемому або праворуч?)

або взагалі зробити так 1. Видаляємо елемент

  1. Проходимо весь список поки не натрапимо на віддалений (NULL)
  2. Перекидаємо посилання з елемента перед віддаленим на елемент після віддаленого (минаючи сам віддалений елемент)
  3. Повторюємо п.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

Схожі статті