链表逆放.

链表逆置...
void reverse(struct student *ls)
{
    struct student *last = ls->next;

    struct student *pre = ls;
    struct student *cur = ls->next;
    struct student *next = NULL;
    while(cur)
    {
        next = cur->next;
        cur->next = pre;
        pre = cur;
        cur = next;
    }

    ls->next = pre;
    last->next = NULL;
}

这是将链表逆置的函数,头节点不变,
while里面的循环我实在是看不懂。。。。
哪位大神能通俗点讲一下么?谢谢!链表逆放.
------解决思路----------------------
引用:
不考虑链表只有1个或者2个节点...

参看:http://blog.****.net/zhangxiangdavaid/article/details/26291113
如果,看不懂,可以边看边画图~
------解决思路----------------------
先看懂这篇博文,你就明白了:http://www.cnblogs.com/pianoid/archive/2011/05/03/reverse-a-singly-linked-list.html