hasherfrog
если делаем вот так:
Код:
//is_sort=FALSE; // чтобы ещё раз просмотреть список.....
то можно проследить, что происходит после кождой итерации цикла while(!is_sort).
Перед последней итерацией данного цикла список выглядит так:
|--------------------------------|
| expert | family | ochki |
|--------------------------------|
| 7 | krotov | 3 |
| 2 | semenov | 3 |
| 2 | sidopov | 2 |
| 2 | ivanov | 1 |
| 4 | sidorov | 3 |
| 4 | chein | 2 |
| 4 | petrov | 1 |
| 7 | popov | 2 |
| 7 | sidopov | 1 |
|--------------------------------|
т.е. два наибольших элемента переместились в конец списка (значит до этого момента всё работает верно), а при перемещении третьего наибольшего элемента получается вся ерунда. Т.е. иными словами, когда один из замещаемых элементов является началом списка.
Цитата:
Затираете где-то указатель
|
Вот, в выше описанный момент это и делаем (см. рис.), только не понял, как этого избежать, где ошибка.
------------------------------------------------------------------------------------------------------------
Цитата:
Кто такой last->next->prior?
|
last->next, это указатель на следующий элемент за указателем last.
last->next->prior -- это указатель prior этого следующего за last элемента, т.е.
last->next->prior=list; указатель prior следующего за last элемента, теперь будет указывать на тот же участок памяти, что и list.