{
struct stu *p1,*p2,*p3;
p1=head;
p2=p1->next; // 这个结点为要移动的结点
while(p2)
{
p3=p2->next; //记录的为要移动的结点的下一个结点
p2->next=p1; //移动结点到最前
p1=p2; //移动的结点变为新表头
p2=p3; //下个结点变为要移动的结点
}
head->next=NULL; //移动完毕后head变为表尾,让它指向为空
head=p1;
return head;
}
head->next=NULL; 这一行,head->next为什么还要指向空呢,head不是一直没移动过吗,指向的地址没变,怎么会变成表尾,让head直接指向头节点不就行了?
注释不都已经说了么,既然逆序了,head就成了链表尾了,自然其next要指向空,如果指向头节点,那就成循环链表了
第12行的head还是原来链表的head,逆序完成后,这个节点就应该是链表的尾结点了,所以它的next就要设为null。
第13行,将head重置为逆序后的头,第14行返回这个头