线性链表就地逆转函数,用“砍头”法。
砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的
链表的就地逆转:
//线性链表就地逆转函数,用“砍头”法
//砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的
void Reverse(LList *Head)
{
LList *PL1,*PLn,*Tmp;
PL1=Head->next;
PLn=PL1->next;//先保存头结点后面一个结点的指针,不然头结点砍断后将丢失后面的结点
PL1->next=NULL;//砍断第一个结点,也就是头结点
while(PLn)
{
Tmp=PLn->next;//用Tmp保存当前结点的next结点的指针,确保砍断当前结点后丢失后面的结点。
PLn->next=PL1;
Head->next=PLn;
PL1=PLn;//PLn成为下一个结点的next指针的指向目标
PLn=Tmp;//PLn变成需要插入的结点的指针了
}
}