Что он на самом деле делает, так это:
Мы начинаем со следующего:
pCur = pList (pCur = pList)
|
3 7 6 1 2 8 4 5 -> NULL
Затем мы перемещаем pCur на один шаг вперед, а pCur-> next-> next! = NULL, поэтомув итоге мы получим
pList pCur
| |
3 7 6 1 2 8 4 5 -> NULL
Затем мы прикрепим заголовок списка к хвосту
pList pCur pList (again)
| | |
3 7 6 1 2 8 4 5 3 7 ....
Это даст нам бесконечно круговой список.
Затем мы переместимсяpList указывает на pCur-> next
pCur pList
| |
3 7 6 1 2 8 4 5 3 7 ....
Если мы переместим это так, что pList будет первым (что мы можем сделать, поскольку он бесконечно круговой):
pList pCur pList (again)
| | |
5 3 7 6 1 2 8 4 5 3 7 ....
Мы наконецскажем, что то, что следует за pCur, равно NULL, что дает нам:
pList pCur
| |
5 3 7 6 1 2 8 4 -> NULL
Как вы можете видеть, для этого нужно переместить последний элемент списка вперед.