单链表的就地逆转

线性链表就地逆转函数,用“砍头”法。

砍断头结点后,在头结点和Head指针的中间不断插入链表的结点,从而达到链表逆转的目的

 

 

单链表的就地逆转_第1张图片

 

链表的就地逆转:
//线性链表就地逆转函数,用“砍头”法
//砍断头结点后,在头结点和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变成需要插入的结点的指针了
	}
	
}


 

你可能感兴趣的:(Data,Struct)