递归一定要设置明确的结束条件,如果不设置限制条件,递归就是一个死循环。
:1.不生成新链表,利用打印函数实现逆序输出
PrintList_Recursion这个打印数据的函数,在被调用时,原函数暂停,开始执行被调用的函数,被调用的函数执行完毕后,才会继续执行原函数。利用这个原理,实现数据的逆序输出
:2.用递归的方法生成新的逆序链表
生成新的链表,创建一个全局变量
Node *new_Head;//全局变量,存储新的链表的头指针
Node* Reverse_Recursion(Node* head_Pointer){
if(NULL == head_Pointer->pNext){ //递归退出条件,指针指向最后一个节点
new_Head = head_Pointer; //新链表的头指针指向旧链表最后一个节点
return new_Head;
}
Reverse_Recursion(head_Pointer->pNext); //当head_Pointer=150时
head_Pointer->pNext->pNext = head_Pointer;//节点250的pNext指针指向节点150
head_Pointer->pNext = NULL;
return new_Head;
}
int main(){
Node* pHead = NULL;
pHead = Insert_Tail(pHead,1);//尾插法增加节点
pHead = Insert_Tail(pHead,2);
pHead = Insert_Tail(pHead,3);
pHead = Insert_Tail(pHead,4);
pHead = Insert_Tail(pHead,5);
pHead = Insert_Tail(pHead,6);
pHead = Insert_Tail(pHead,7);
pHead = Insert_Tail(pHead,8);
pHead = Insert_Tail(pHead,9);
pHead = Insert_Tail(pHead,10);
pHead = Insert_Tail(pHead,11);
pHead = Insert_Tail(pHead,12);
PrintList(pHead);//打印旧链表数据
new_Head=Reverse_Recursion(pHead);
PrintList(new_Head);//打印逆序生成的新链表数据
return 0;
}