链表笔试题1:从尾到头打印单链表

从尾到头打印单链表

方法1:遍历重新打印

typedef char ListType;
typedef struct ListNode
{
ListType data;
struct ListNode* next;
}ListNode;
void Printendtofirst(ListNode * first)
{
ListNode* cur = first;
ListNode* end = NULL;
while (end != first)
{
cur = first;
while (end != cur->next)
{
cur = cur->next;
}
//end==cur->next
printf(“%d”,cur->data);
//将最后一个指针前移
end = cur;
}
}

方法一的图解

方法2:递归打印

typedef char ListType;
typedef struct ListNode
{
ListType data;
struct ListNode* next;
}ListNode;
void Printendtofirst(ListNode * first)
{
//递归结束条件
if (first->next != NULL)
//子问题
Printendtofirst(first->next);
printf(“%d”, first->val);
}

方法3:利用栈

/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector printListFromTailToHead(ListNode* head) {
vector< int > rever;
stack< int > sta;
ListNode* p=head;
while(p!=NULL)//将值放入栈中
{
sta.push(p->val);
p=p->next;
}
int len=sta.size();
for(int i=0;i

方法4:逆置单链表再打印

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值