正序逆序生成单链表,正序逆序输出链表(递归法和顺序栈法)

1.生成一个单链表

2.输出结点的值


typedef struct LNode{
	int key;
	struct LNode *next;
}LNode,*List;

//正序生成单链表
void CreateList1(List &L,int n){
	L=(List)malloc(sizeof(LNode));
	L->next=NULL;
	LNode *q=L;
	for(int i=1;i<=n;i++)
	{
		LNode *p=(LNode *)malloc(sizeof(LNode));
		scanf("%d",&p->key);
		q->next=p;
		q=p;
		p->next=NULL;
	}
	return;
}
//逆序生成单链表
void CreateList2(List &L,int n){
	L=(LNode *)malloc(sizeof(LNode));
	L->next=NULL;
	for(int i=0;i<n;i++)
	{
		LNode *p=(LNode *)malloc(sizeof(LNode));
		scanf("%d",&p->key);
		p->next=L->next;
		L->next=p;
	}
	return;
}
//正序输出链表print1
void Print1(List L){
	LNode *p=L->next;
	while(p!=NULL)
	{
		printf("%d",p->key);
		p=p->next;
	}
}
//逆序输出单链表(递归法)print2
void Print2(List L){
	if(L->next!=NULL)
	{
		LNode *p=L->next;
		Print2(p);
		printf("%d",p->key);
	}
}
//逆序输出单链表(借助栈)Print3
typedef struct Stack{
	int *top;
	int *base;
	int stacksize;
}Stack;
void InitStack(Stack &S){                                   //构造一个空栈
	S.base=(int *)malloc(INITSTACKSIZE*sizeof(int));
	if(!S.base)
		exit (OVERFLOW);
    S.top=S.base;
    S.stacksize=INITSTACKSIZE;
}
int Empty(Stack S){                                         //判断一个栈是否为空
	if(S.base==S.top)
		return 1;
	else
		return 0;
}
void Push(Stack &S,int e)                                    //入栈
{
	if((S.top-S.base)>=S.stacksize)
	{
		S.base=(int *)realloc(S.base,(INITSTACKSIZE+INITSTACKADD)*sizeof(int));
		if(!S.base)
			exit (OVERFLOW);
		S.top=S.base+S.stacksize;
		S.stacksize+=INITSTACKADD;
	}
	*S.top++=e;
}
void Pop(Stack &S,int &e){                                     //出栈
	if(S.base==S.top)
		return;
	e=*--S.top;
}
void Print3(List L){
	Stack S;
	InitStack(S);
	LNode *p=L->next;
	while(p!=NULL)
	{
		Push(S,p->key);
		p=p->next;
	}
	while(!Empty(S))
	{
		int e;
		Pop(S,e);
		printf("%d",e);
	}
}




  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用递归将整数逆序输出。具体步骤如下: 1. 定义一个递归函数,输入参数为需要逆序输出的整数。 2. 判断输入的整数是否为0,如果为0,则停止递归。 3. 如果输入的整数不为0,则先输出它的个位数,再递归输出其余位数。 4. 在递归函数中,每次将输入的整数除以10,将得到的商作为下一次递归的输入参数。 下面是使用C++实现的代码示例: ```c++ #include<iostream> using namespace std; void reverse(int n){ if(n == 0) return; // 递归终止条件 cout << n % 10; // 输出个位数 reverse(n / 10); // 递归输出其余位数 } int main(){ int n = 12345; reverse(n); // 输出结果为:54321 return 0; } ``` 在这个示例中,输入的整数为12345,递归输出的结果为54321。 ### 回答2: 递归是一种函数调用自身的方。将整数逆序输出可以通过递归来实现。具体的步骤如下: 1. 判断整数是否为0,如果是,则递归结束。 2. 取整数的最后一位数字,可以通过取模运算(整数除以10的余数)来得到。 3. 输出该位数字。 4. 将整数除以10,取整得到去掉最后一位数字后的整数。 5. 调用递归函数,将去掉最后一位数字的整数作为参数传入,重复上述过程。 下面是一个具体的实现示例: ```python def reverse_print(num): if num == 0: # 递归结束条件:整数为0 return digit = num % 10 # 取整数的最后一位数字 print(digit) # 输出该位数字 num = num // 10 # 去掉最后一位数字 reverse_print(num) # 递归调用,传入去掉最后一位数字的整数 # 测试 num = 12345 reverse_print(num) # 输出:5 4 3 2 1 ``` 这样,通过递归调用,我们可以将整数逆序输出。 ### 回答3: 递归是一种通过调用自身来解决问题的方递归将问题分解为一个或多个子问题,并通过不断调用自身来解决子问题,最终得到问题的解。下面用递归来实现将整数逆序输出。 首先,我们需要定义一个递归函数来解决这个问题。这个函数接受一个整数作为输入,并将其逆序输出。具体的步骤如下: 1. 首先,将输入的整数转换为字符串,以便我们可以逐个输出它的数字。 2. 如果字符串长度为1,表示递归已经到达最底层,直接输出这个字符即可。 3. 否则,递归调用函数本身,将剩余的子字符串作为新的输入。 4. 在递归调用的返回值前,将当前字符输出。 5. 最后,将逆序输出的字符串拼接在一起,得到最终的结果。 例如,输入整数12345,按照上述步骤进行逆序输出的过程如下: 1. 将整数转换为字符串"12345"。 2. 递归调用函数本身,输入为"2345"。 3. 继续递归调用,输入为"345"。 4. 再次递归调用,输入为"45"。 5. 继续递归调用,输入为"5"。 6. 字符串长度为1,输出字符"5"。 7. 返回到上一步骤,输出字符"4"。 8. 返回到上一步骤,输出字符"3"。 9. 返回到上一步骤,输出字符"2"。 10. 返回到上一步骤,输出字符"1"。 11. 最终得到逆序输出的字符串"54321"。 这就是利用递归将整数逆序输出的过程。递归在解决该问题时,将问题分解为更小的子问题,并通过递归调用不断解决子问题,最终得到整数的逆序输出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值