面试题6. 从尾到头打印链表

题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例:

输入:head = [1,3,2]
输出:[2,3,1]

思想1: 利用栈先进后出的特性来实现

  • 把数据push_back()放入栈中,再pop()出来到数组。
  • 返回数组即可。
    代码1:

//1.利用栈
vector<int> printListFromTailToHead(ListNode* head)
{
	vector<int> ar;
	stack <int> stk;
	while(head!=NULL)
	{
		stk.push(head->val);
		head=head->next;
	}
	while(!stk.empty())
	{
		ar.push_back(stk.top());//top得到栈顶元素
		stk.pop();//pop删除
	}
	return ar;
}

思想2: 数组逆置,直接用系统自带的函数或者自己写都可以。
代码2:

vector<int> printListFromTailToHead1(ListNode* head)
{
	vector<int>ar;
	while(head!=NULL)
	{
		ar.push_back(head->val);
		head=head->next;
	}
	//reverse(ar.begin(),ar.end());系统自带
	int j=ar.size()-1;//下标从0开始的
	int temp=0;
	for(int i=0;i<j;i++)
	{
		temp=ar[i];
		ar[i]=ar[j];
		ar[j]=temp;
		j--;
	}
	return ar;
}

思想3: 递归。

  • 从第一个开始递归,一直往后走,直到最后一个退出。
  • 退出后把数据放到数组中。
    举例:
    在这里插入图片描述

代码3:

vector<int>ar;//必须开辟到外面,不然递归层次过深,导致溢出
vector<int> printListFromTailToHead2(ListNode* head)
{
	if(head!=NULL)
	{
		if(head->next!=NULL)
		{
			printListFromTailToHead2(head->next);
		}
		ar.push_back(head->val);
	}
	return ar;
}

加油哦!🙆‍♀️。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值