//这个算法是没有头结点的情况
List Reverse( List L ){ //这里的L是原链表的表头.
List head,next,prev;//head用来存储当前结点的地址,next存储下一个结点的地址,prev存储上一个
head=L; //当前结点是首元结点
prev=NULL;//上一个结点应该是NULL
while(head!=NULL){
next=head->Next; //首先先存储下下一个结点的地址。
head->Next=prev;//让当前结点指向上一个结点。
prev=head; //下一次的前一个结点就是这一次的当前结点,使存放上一个结点的指针下移一位
head=next; //下一次的当前结点就是这一次的下一个结点,使存放当前结点的指针下移一位
}
return prev;
}
//循环体里的四步,步骤不能错:1、记录当前结点的下一个结点
// 2、将当前结点指向上一个结点
// 3、存放上一个结点的指针下移一位
// 4、存放当前结点的指针下移一位
//后两步是为下一次循环准备,prev(存放上一个结点的指针和head(存放当前结点的指针)下移一位。
//最后一个结点时head向下移动一位变成了NULL,prev就指向了最后一个结点,就是逆转后的链表的首元结点。