2022.10.24程序员节快乐!
逆置单链表(递归)
任务描述
本关任务:对于不带头结点的单链表L,设计一个递归算法逆置所有结点。
编程要求
根据提示,在右侧编辑器补充代码,逆置不带头结点的单链表。
测试说明
平台会对你编写的代码进行测试:
测试输入: 5
1 2 3 4 5
预期输出:
实验结果:
逆置前L: 1 2 3 4 5
执行L=Reverse(L)
逆置后L: 5 4 3 2 1
销毁L
开始你的任务吧,祝你成功!
C/C++代码
#include "LinkList.h" //包含单链表的基本运算算法
/********************Begin*************************/
//逆置不带头结点的单链表L
LinkNode *Reverse(LinkNode *L)
{
if(L==NULL||L->next==NULL)
return L;
LinkNode* p=Reverse(L->next);
L->next->next=L;
L->next=NULL;
return p;
}
/********************End*************************/
int main() //调试主函数
{
// ElemType a[] = {1, 2, 3, 4, 5, 6};
// int n = sizeof(a) / sizeof(a[0]);
int n;
scanf("%d", &n);
int* a = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)scanf("%d", &a[i]);
LinkNode *L;
CreateList(L, a, n);
printf("实验结果:\n");
printf(" 逆置前L: ");
DispList(L);
printf(" 执行L=Reverse(L)\n");
L = Reverse(L);
printf(" 逆置后L: ");
DispList(L);
printf(" 销毁L\n");
DestroyList(L); //销毁单链表
return 0;
}