自己理解的思路如下所示:
从第二个节点开始,先记录下一个节点,把第二个节点移到头节点之前,
头节点变为移动的这个节点
之前记录的节点变为接下来要移动的节点
用for循环重复
最后把原来头节点变成尾节点(*next指向NULL)
返回链表 的头节点
c语言实现代码如下:
struct stu *reserve(struct stu *head)
{
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;
}