#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. 5. Удалить из списка с одним элементом.