Потеря частей в списке ссылок на C

#c #linked-list

#c #связанный список

Вопрос:

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

 (struct pointers) *current, *ahead, *behind, *begin;

(behind)-->(current)-->(ahead) //This is what I want to do

behind->next = current;
current->next = ahead;
  

Это правильный способ разбить и соединить список? Без потери чего-либо..

Комментарии:

1. Я бы рекомендовал метод программирования write-test-debug.

2. @Horus: Я бы порекомендовал метод программирования «пойми, что ты делаешь» -запись-тестирование-отладка. Без понимания вы никогда не напишете достаточно плотный набор тестов, чтобы уловить крайние случаи или даже большинство «нормальных» случаев.

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

4. да, вероятно, нужно сначала выяснить, что я делаю

Ответ №1:

То, что у вас есть, выглядит правильным, но скорее неполным. Одно из неписаных правил программирования заключается в том, что вы не можете правильно написать реализацию связанного списка с первого раза. Есть четыре случая, с которыми вам нужно разобраться:

  1. Вставить в пустой список
  2. Вставить в непустой список
  3. Удаление первого элемента из списка
  4. Удаление любого другого элемента из списка

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

Комментарии:

1. 5. Удалить из списка с одним элементом.