非递归:
List Reverse( List L ){
PtrToNode head,temp;
if(!L) return;
head = L;
L =L->Next;
head ->Next = NULL;
while(L){
temp = L;
L =L->Next;
temp ->Next =head ;
head = temp;
}
return head;
}
递归:节点连接交换
//递归实现,节点发生改变
//递归回溯法:要点;1.终止条件是什么,然后做什么 2.未达到终止条件的一直递归,跳出递归之后做什么,返回什么条件
List Reverse( List L ){
//递归到最后一个节点
if(L != NULL || L ->Next ==NULL){
return L;
}
else{ //递归回溯部分,先反转后边的节点,到最后节点
List head = Reverse(L->Next);
//将当前节点设置为后边节点的后继节点
L->Next->Next = L;
L->Next = NULL;
return head;
}
}
递归:值交换
void swap(int* a, int* b){
int temp;
temp = *a;
*a =*b;
*b = temp;
}
void SWapList(List L,List head){
if(L == NULL || L ->Next == NULL){
swap(&(head->Data),&(L->Data));
}
else{ //递归回溯部分,先反转后边的节点,到最后节点
SWapList(L->Next,head);
//将当前节点设置为后边节点的后继节点
if (head ->Next !=L) {
head = head->Next;
}
}
}
//递归回溯,值交换
//递归回溯,值交换
List Reverse( List L ){
//递归到最后一个节点
if(!L) return L;
List head = L;
List temp =L;
SWapList(L,head);
return temp;
}