链表经典面试题之从尾到头打印单链表

本文探讨了如何解决链表面试中的经典问题——从尾到头打印单链表。通过详细步骤解析了实现这一操作的方法,涵盖了链表操作的关键技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:
  要求将一无头单链表的节点从尾到头打印出来。

这是一道经典的面试题,今天我们来介绍它的五种解决方法。
1 解决思路:

    定义两个指针,一个指向链表头(pcur),一个指向每次要打印的节点(pprint)。每次让pcur来遍历,代码实现如下:


//从尾到头打印单链表
void THprint2(PNode pHead){
	if (NULL == pHead){
		return;
	}
	PNode pcur = NULL;
	PNode pprint = NULL;
	while (pprint != pHead){
		pcur = pHead;
		while (pcur->_pNext != pprint){
			pcur = pcur->_pNext;
		}
		printf("%d", pcur->_data);
		pprint = pcur;
	}
}

但这种方法每打印一个节点就要遍历一次链表,时间复杂度为o(n^2);接受不了。

2 解决思路;
           遍历一遍链表,将值存到数组里,倒着打印出来(这里就不实现了)。这种方法的时间复杂度为o(n),但空间复杂度为也为o(n)。

3 解决思路:
           借助栈来实现,因为栈的特性为先进后出,所以可以遍历一遍链表,将节点push进栈,然后在pop弹出,将实现逆序打印。

4  可先将链表逆置过来,再遍历一次链表将节点打印出来,最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值